C++中关于调用操作符的重载operator()与自定义构造函数
答案:1 悬赏:60
解决时间 2021-04-21 15:48
- 提问者网友:幽瑟玉琼情殇
- 2021-04-21 03:02
最近在学习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;
最佳答案
- 二级知识专家网友:单身小柠`猫♡
- 2021-04-21 04:34
thread thrd1(count(10), 5);
thread thrd2(count(20), 10);顺带一提, C++11 已有线程库,无需使用 boost
thread thrd2(count(20), 10);顺带一提, C++11 已有线程库,无需使用 boost
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯