【发布时间】:2012-08-21 12:08:51
【问题描述】:
在一个多线程程序中,有 2 个线程 - 线程 1 - 将运行一个循环,将整数变量增加 1000 倍,然后退出 线程 2 - 将运行一个循环,将整数变量减少 1000 次然后退出
两个线程都在一个信号量上等待并大致同时启动,并被安排在大致相同的时间在不同的内核上运行。
两个线程退出后,整型变量的值会为零吗? 注意:不使用锁定(互斥锁等)
让我们假设 linux 和 x86 架构以及多核硬件。
如果将相同的整数声明为 volatile (C++) 会发生什么情况?
【问题讨论】:
-
答案是否定的,值不一定为零,除非你使用原子整数。
-
无锁定 - 这是否意味着递增/递减操作不是原子的?如果是这样,则不能保证最终的零值。
-
@Rost..操作是纯整数递增/递减让我们说 ++i 和 --i
-
@Medicine 这意味着结果不能保证为零。
标签: c++ linux multithreading locking multicore