【发布时间】:2011-12-01 19:08:21
【问题描述】:
简单版:在 C++ 程序中,我使用两个不同的线程来处理一些整数变量。但我敢肯定,一个人总是在其中写入一些价值,而另一个人只是阅读那个。读/写数据时还需要使用互斥锁吗?
现在细节:主要思想是第一个线程生成一些信息并将它们保存到一个数组中,第二个线程从该数组中读取数据并处理它们。这个数组代表一个队列。这意味着我有两个索引值指向队列中的第一个和最后一个项目。现在我想知道在读取或写入值时是否必须锁定这两个索引值,或者是否可以在不锁定的情况下检查它们?注意generator线程是queue_back的唯一线程改变索引,处理器线程拥有改变queue_front的独占权限。
如果我正在为基于 linux 的系统进行任何更改,并且代码是使用 gcc 编译的。
PS:在一些使用线程的代码中,我看到关键字volatile围绕不同线程之间共享的变量,我也需要使用它吗?
【问题讨论】:
-
如果不使用
volatile,其他线程可能永远看到对变量所做的更改。
标签: c++ multithreading mutex