以下是我的一些代码。
int main()
{
boost::thread_group threads; // Thread Pool
// Here we create threads and kick them off by passing
// the address of the function to call
for (int i = 0; i < num_threads; i++)
threads.create_thread(&SendDataToFile);
threads.join_all();
system("PAUSE");
}
void SendDataToFile()
{
// The lock guard will make sure only one thread (client)
// will access this application at once
boost::lock_guard<boost::mutex> lock(io_mutex);
for (int i = 0; i < 5; i++)
cout << "Writing" << boost::this_thread::get_id() << endl;
}
目前我只是使用cout而不是写入文件。
是否可以在另一个线程之前实际选择一个线程来执行操作。所以我有一个我想写的文件,4个线程想要同时访问该文件,我是否可以先说好线程2。 ?在BOOST
可以像cout一样使用fstream吗?当我写入文件时输出没有杂乱(没有互斥)?但是当我在没有互斥锁的情况下打印到控制台时,它会像你期望的那样混乱。
答案 0 :(得分:0)
使用由原子更新,互斥体,信号量,条件变量等保护的全局变量的组合,有许多等效方法可以做到这一点。在我看来,最直接地传达你所做的事情的方式是什么?重新尝试做的是让你的线程在ticket lock等待,而不是代表他们到达锁的顺序的票号,它被选择为创建线程的顺序。您可以将这个想法与Boost spinlock example结合起来,以实现简单且可能高效的实现。