我正在学习如何在Boost库使用线程,我的搜索过程中,我发现下面的代码:void运算符()()了解
struct count
{
count(int id) : id(id) {}
void operator()()
{
for (int i = 0; i < 10; ++i)
{
boost::mutex::scoped_lock
lock(io_mutex);
std::cout << id << ": " << i << std::endl;
}
}
int id;
};
int main(int argc, char* argv[])
{
boost::thread thrd1(count(1));
boost::thread thrd2(count(2));
thrd1.join();
thrd2.join();
return 0;
}
这个程序工作正常,但我的问题是,什么是void operator()()
函数的行为?因为有两个线程,每个线程都使用不同的值初始化计数。这是两个主要的count
变量是单独创建的,所以他们的void operator()()
应该是不同的每个变量。但似乎void operator()()
是两个线程相同。在这个代码void operator()()
还有一件事是不是从任何地方被调用,所以它如何运行?
有人能解释一下这个函数里面发生了什么吗?
void operator()()
是什么让你觉得它们对于两个线程都是一样的? –
@JosephMansfield我运行这个程序检查互斥锁的工作情况,它显示了互斥锁的确切工作情况。它不允许其他线程在第一个线程完成之前处理此函数。 – nabeel