concurrency相关内容
这里的东西:我有两个应用程序,用C ++编写并运行在两个机器与不同的操作系统(一个Linux和一个Windows)。其中一个过程是负责更新NAS(网络连接存储)上的XML文件,而另一个读取此文件。 是否可以同步这两个进程,以避免在修改文件的同时读取该文件? 解决方案 您可以在执行写入之前创建的服务器上创建锁定文件,等待,然后在完成时写入和删除。 在工作之前,读写器和写入器都有一个锁
..
请考虑以下情况。我们有一个带有静态局部变量的C ++函数: void function() { static int variable = obtain(); // blahblablah } 该函数需要从多个线程调用同时,所以我们添加一个关键部分,以避免并发访问静态局部: void functionThreadSafe() { Critical
..
此问题使我怀疑一个我一直在追踪多年的做法。 对于函数局部静态const对象的线程安全初始化,我保护对象的实际构造但不是引用它的函数局部引用的初始化。这样的东西: 命名空间{ const some_type& create_const_thingy() { lock my_lock(some_mutex); static const some_type the_const_th
..
C ++ 03中的并发内存模型是什么? (而且,C ++ 11是否更改了内存模型以更好地支持并发?) 解决方案 C ++内存模型是物理内存相对于C ++代码读/写的时间和原因的规范。 > 直到下一个C ++标准,C ++内存模型与C相同。在C ++ 0x标准中,期望包括用于多线程的适当的内存模型a href =“http://en.wikipedia.org/wiki/C%2B
..
假设我在类中有一个整数变量,这个变量可能会被其他线程同时修改。写由互斥保护。我需要保护读吗?我听说有一些硬件架构,如果一个线程修改一个变量,另一个线程读取它,那么读取结果将是垃圾;在这种情况下,我确实需要保护读。我从来没有见过这样的架构。 这个问题假设一个事务只包括更新一个整数变量,所以我不担心任何 解决方案 原子读取 如前所述,它依赖于平台。在x86上,该值必须在4字节边界上
..
已知在 x86 上操作 load()和 store() memory barrier memory_order_consume,memory_order_acquire,memory_order_release,memory_order_acq_rel 不需要缓存和管道的处理器指令,汇编代码总是对应于 std: :memory_order_relaxed ,这些限制仅对编译器的优化是必要的: ht
..
我的周末项目包括编写跨平台的并发原语库(关键部分,读/写互斥,互锁整数,事件等),并想知道如何单元测试这个东西。我意识到这本身测试并发代码是很难的,但在测试的原语说的代码不能那么难,可能吗? 原来,它是很难。至少,对我来说是。 所以,你会如何去处理这个?只是作为一个例子,我甚至不知道从哪里开始测试关键的部分。 解决方案 不要去想单位测试,想想要指定的行为。例如: Giv
..
在序列代码中,更新最大值可以简单地通过 template maximum_value)maximum_value = value; } 但是,对于 ; T> 含有最大值的变量: t
..
在x86架构中,存储到同一内存位置具有总订单,例如,请参见此视频。 更准确地说,在 - 最初 - std :: atomic x {0}; - Thread 1 - x.store(1,std :: memory_order_release); - Thread 2 - x.store(2,std :: memory_ord
..
我想学习如何使用rand_r,在阅读这个问题后我还是有点困惑,有人可以看看,指出我错过了什么?根据我的理解,rand_r取指向某个值的指针(或一段具有某些初始值的内存),并在每次被调用时使用它来生成新的数字。每个调用rand_r的线程都应该为它提供一个唯一的指针(或一块内存),以获得不同线程之间的“实际随机”数字。这就是为什么: int globalSeed; //线程1 ra
..
特别是,我在寻找一个阻塞队列。在C ++ 11中有这样的事情吗?如果没有,我的其他选择是什么?我真的不想去自己的线程级别了。太容易出错。 解决方案 根据Microsoft Visual C ++团队的Diego Dagum,: 周期性的问题(很多,其中许多)是关于STL容器 和他们是否是线程安全。 在这里采取斯蒂芬的话,现实是,不是作为一个 错误,但作为一个特点:拥有每个S
..
所以我正在阅读的内存模型是即将到来的C ++ 0x标准的一部分。但是,我对编译器允许做的一些限制有些困惑,特别是关于推测加载和存储。 开始时,一些相关内容: Hans Boehm的页面关于线程和C ++ 0x中的内存模型
..
从Herb Sutter的演示文稿。这工作正常在linux下gcc 4.6.3。我认为future.h不支持在mingw,但错误是真的很难理解! #include #include #include #include #include using namespace
..
我正在开发一个应用程序,其中大量的线程需要迭代的字符串值的集合,并尝试匹配它自己的数据与列表中的数据。 我正在寻找以下用例: 向量被初始化为std :: string类型的几个元素。 (让我们说对象名是strList)。 所有线程将迭代strList,以查看它的值是否与strlist的至少一个元素匹配。 没有线程会尝试修改strList,它将被严格用作只读对象。 并发读是线程
..
当我尝试编译这个简单的程序: #include void f(){ std :: this_thread :: sleep_for(std :: chrono :: seconds(3)); } int main(){ std :: thread t(f); t.join(); Ubuntu 10.04上的gcc版本4.4.3(32位): }
..
我有一个std :: list容器和这些线程: 一个作家线程无限期添加元素。 一个读取器/写入器线程,在可用时读取和删除元素。 读取线程访问容器的SIZE(通过使用size()方法) 它保护从前两个线程对列表的访问。我的问题是,做大小读取器线程需要获取这个互斥吗?我应该使用读/写mutex? 我在使用Visual C ++ 6的Windows环境中。 更新:
..
尝试编译以下代码时 #include #include void foo(){std :: cout g ++ -g -Wall
..
全局变量在2个不同核心上的2个并发运行的线程中共享。线程写入和读取变量。对于原子变量,一个线程可以读取一个陈旧的值?每个核心可能在其缓存中具有共享变量的值,并且当一个线程在缓存中写入其副本时,不同核心上的另一个线程可能从其自己的缓存读取失效值。或者编译器强大的内存排序从其他缓存读取最新的值? c ++ 11标准库具有std :: atomic支持。这与volatile关键字有何不同? 解决方
..
Ok我有点不确定如何最好命名这个问题:)但假设这个场景,你是 出去和获取一些网页(与各种网址)和本地缓存。缓存部分很容易解决,即使有多个线程。 但是,想象一个线程开始获取一个url,几个毫秒后,另一个想得到相同的网址。有什么好的模式使秒线程的方法等待第一个获取页面,将其插入缓存并返回它,所以你不必做多个请求。有足够的开销,即使对于需要大约300-700毫秒的请求,它值得做吗? 基本上
..
我在我的.NET 4应用程序中使用并行数据结构,我有一个 ConcurrentQueue ,在我通过它处理时被添加。 我想做一些类似的事情: personqueue.AsParallel()。WithDegreeOfParallelism(20).ForAll (i => ...); ,因为我进行数据库调用来保存数据,线程。 但是,我期望 ForAll 不会出队,做
..