共享数据带来的问题
在C++多线程编程中,确实存在共享数据的问题,特别是当多个线程试图同时修改同一份数据时。
只读操作通常不会导致问题,因为所有线程都可以同时读取相同的数据,而不会对数据产生修改。
当一个或多个线程需要修改共享数据时,就需要特别小心。
不变量(Invariants)是一个非常重要的概念,它可以帮助程序员更好地理解和描述特殊数据结构的状态。
- 在计算机科学中,不变量通常被用来描述一个程序或者系统的某些属性,这些属性在程序或者系统的生命周期中始终保持不变。
- 例如,对于一个List,一个常见的不变量是"链表中包含的元素数量"。当这个不变量被破坏时,通常意味着数据结构的状态已经发生了改变。
- 对于双链表来说,在删除一个节点时,需要更新其前后的节点的指针。在这个过程中,不变量会被暂时破坏,直到两个指针都完成更新。
- 线程间潜在问题就是修改共享数据,致使不变量遭到破坏, 这个时候就会产生条件竞争(race conditions) 。