【发布时间】:2011-04-25 14:07:57
【问题描述】:
我正在使用 boostthread 创建 3 个线程,每次调用相同的函数并传递不同的参数。 例如。 1/ thread.add(function, int a1, std::string b), thread.add(function, int a2, std::string b), thread.add(function, int a3, std::string b), thread.add(function, int a4, std::string b)
当线程中的全局值发生更改时,我不希望其他线程执行 并再次更改值 例如函数(a,b){
如果(该线程发生了某事) value = 5;
//如果什么都没发生 值 = 1; }
如果一个线程的值为 5,那么我不希望其他线程干扰该值并使其回到 1。我该怎么做?谢谢。
也许这样做的方法是使用 boost:mutex 但我没有看到这样做有任何好处,因为这个值只是被发现 在 return 语句之前,我很可能已经使用了 boost join_all()。但这会效率较低。
【问题讨论】:
-
尝试将更改后的值放入队列中。插入时确保它不存在于队列中,如果存在,则丢弃新获得的值,这样您将获得一个不应更改的值,并注意队列必须在锁定语句中,即 mutex
-
np 伴侣。希望它对你有用。
标签: c++ multithreading boost mutex