简单版:在一个C++程序中,我使用两个不同的线程来处理一些整数变量。但我相信一个人总是在写一些价值,另一个人只是在阅读那篇文章。在读取/写入数据时是否还需要使用互斥锁?确实需要使用互斥锁吗?
现在的细节:主要思想是第一个线程生成一些信息并将它们保存到一个数组中,第二个线程从该数组中读取数据并处理它们。这个数组表示一个队列。这意味着我有两个索引值指向队列中的第一个和最后一个项目。现在我想知道,如果我在读取或写入数值时必须锁定这两个索引值,还是可以不锁定地检查它们?请注意,生成器线程是queue_back的唯一线程更改索引,并且处理器线程具有更改queue_front的独占权限。
如果我正在为基于Linux的系统开发任何更改,并使用gcc编译代码。 PS:在一些使用线程的代码中,我看到关键字volatile
围绕着不同线程之间共享的变量,我是否也需要使用它呢?
如果未使用volatile,其他线程可能会或可能不会看到对该变量所做的更改。 –