提升线程无法正确增加值
Boost thread won't increase the value correctly
所以,我有这段代码似乎不起作用:(下面有更多细节)
#include <boost/thread.hpp>
#include <boost/bind.hpp>
#include <Windows.h>
using namespace std;
boost::mutex m1,m2;
void * incr1(int thr, int& count) {
for (;;) {
m1.lock();
++count;
cout << "Thread " << thr << " increased COUNT to: " << count << endl;
m1.unlock();
//Sleep(100);
if (count == 10) {
break;
}
}
return NULL;
}
int main() {
int count = 0;
boost::thread th1(boost::bind(incr1,1,count));
boost::thread th2(boost::bind(incr1,2,count));
th1.join();
th2.join();
system("pause");
return 0;
}
基本上,它有一个带两个参数的函数:一个数字(用于区分哪个线程调用它)和一个通过引用传递的整数变量"count"。其思想是,每个线程在运行时都应该增加count的值。然而,结果是它增加了自己的count版本,所以结果是:
Thread 1 increased count to 1
Thread 2 increased count to 1
Thread 1 increased count to 2
Thread 2 increased count to 2
Thread 1 increased count to 3
Thread 2 increased count to 3
而不是每个线程增加计数到下一个数字:
Thread 1 increased count to 1
Thread 2 increased count to 2
Thread 1 increased count to 3
Thread 2 increased count to 4
Thread 1 increased count to 5
Thread 2 increased count to 6
如果我通过简单地调用这个函数两次来运行这段代码,它会按预期工作。如果我使用线程,它不会。
完全初学者在这里。你知道我为什么这么蠢吗?
这是boost::bind
不将int解析为引用。您需要使用引用包装器,以便:
boost::bind( incr1, 1, boost::ref(count) );
因为您需要使用boost::ref
通过boost::bind
通过引用传递某些内容。
boost::thread th1(boost::bind(incr1,1,boost::ref(count)));
相关文章:
- 从不同线程使用int64的不同字节安全吗
- 删除一个线程上有数百万个字符串的大型哈希映射会影响另一个线程的性能
- 在C++中使用cURL和多线程
- 为什么我的C#代码在调用回C++COM直到Task时会暂停.等待/线程.加入
- 在cuda线程之间共享大量常量数据
- 如何将元素添加到数组的线程安全函数?
- 线程,如果else语句,都是错误的上下文切换后,会发生什么
- C++Boost Asio Pool线程,带有lambda函数和传递引用变量
- Qt C++静态thread_local QNetworkAccessManager是线程应用程序的好选择吗
- 异常属于C++中的线程还是进程
- C++中的线程安全删除
- C++使用params创建线程函数会导致转换错误
- 类与私有变量的其他类之间的线程安全性
- CoInitialize()在单独的线程上崩溃而不返回
- c++中的线程池
- 线程之间的布尔停止信号
- 为什么std::async使用同一个线程运行函数
- 用于矢量处理的多个线程
- C++为线程工作动态地分割例程
- 提升线程无法正确增加值