相关疑难解决方法(0)

并发:C++ 11内存模型中的原子和易失性

全局变量在2个不同核心上的2个并发运行线程之间共享.线程写入和读取变量.对于原子变量,一个线程可以读取过时值吗?每个核心可能在其缓存中具有共享变量的值,并且当一个线程在缓存中写入其副本时,不同核心上的另一个线程可能从其自己的缓存中读取过时值.或者编译器执行强大的内存排序以从其他缓存中读取最新值?c ++ 11标准库具有std :: atomic支持.这与volatile关键字有何不同?在上述场景中,volatile和atomic类型的行为方式有何不同?

c++ parallel-processing concurrency multithreading c++11

55
推荐指数
4
解决办法
3万
查看次数

是否有必要锁定一个*只从一个线程写入*而*只从*另一个读取?

我有两个线程在运行.他们共享一个阵列.其中一个线程向数组添加新元素(并删除它们),另一个使用此数组(仅限读取操作).在我添加/删除数组或从中读取数组之前,是否有必要锁定数组?

更多详情:

  • 我将需要在另一个线程中继续迭代整个数组.如前所述,那里没有写操作."只需扫描像固定大小的循环缓冲区"
  • 在这种情况下,最简单的方法是使用锁.然而,锁可能非常慢.如果可以避免使用锁,我不想使用锁.此外,从讨论中得出,可能没有必要(实际上不是)锁定阵列上的所有操作.只是锁定数组的迭代器管理(将由另一个线程使用的计数变量)就足够了

我不认为这个问题"过于宽泛".如果仍然如此,请告诉我.我知道这个问题并不完美.为了能够解决问题,我必须至少结合3个答案 - 这表明大多数人无法完全理解所有问题,并被迫做一些猜测工作.但大多数都是通过我试图纳入问题的评论得出的.答案帮助我非常客观地解决了我的问题,我认为这里提供的答案对于从多线程开始的人来说是非常有用的资源.

c c++ arrays multithreading

24
推荐指数
4
解决办法
4163
查看次数

pthread 互斥对象必须是易失性的吗?

在学习了常规线程之后,我正在学习 pthreads。通常,当我们使用布尔线程对象时,我们将其声明为易失性对象,如下所示volatile bool thread_lock;:我们是否也需要在 pthread 对象上执行此操作,特别是在pthread_mutex_t需要时或它自己处理它?

我查看了该pthread_mutex_t声明,发现它没有 易失性声明。

应该是volatile pthread_mutex_t my_obj;还是pthread_mutex_t my_obj;

c++ multithreading pthreads

0
推荐指数
1
解决办法
79
查看次数