最近在学习boost的Thread库时中看到一段join()方法的示例代码:

class count
{
public:
//自定义构造函数
count(int _id) :id(_id){}
//重载调用操作符
void operator ()() 
{
for (int i = 0; i < 3; ++i)
{
boost::mutex::scoped_lock
lock(io_mutex);
std::cout << id << ": "<<i << std::endl;
}
}
private:
int id;
};
//主程序

int main(int argc, char* argv[])
{
boost::thread thrd1(count(10));
boost::thread thrd2(count(20));
thrd1.join();
thrd2.join();
return 0;
}
代码执行后,显示线程1执行计数三次完再线程2计数三次如下
1:0
1:1
1:2
2:0
2:1
2:2
示例代码中调用操作符的重载operator没有带参数,现想稍作修改在定义调用操作符的重载时带上一个参数,来控制计数的个数,如下
void operator ()(int upper) 
{
for (int i = 0; i < upper; ++i)
{
boost::mutex::scoped_lock
lock(io_mutex);
std::cout << id << ": "<<i << std::endl;
}
main函数部分要怎么修改才能实现两个线程先后计数不同次数
比先1:0到1:4再2:0到2:9这样子。
示例代码头文件部分如下
#include <iostream>
#include <boost/thread/thread.hpp>
#include <boost/thread/mutex.hpp>
boost::mutex io_mutex;

四季花海
浏览 112回答 1
1回答

茅侃侃

thread&nbsp;thrd1(count(10),&nbsp;5);&nbsp;&nbsp;&nbsp;&nbsp;thread&nbsp;thrd2(count(20),&nbsp;10);顺带一提, C++11 已有线程库,无需使用 boost
打开App,查看更多内容
随时随地看视频慕课网APP