你能从线程池中选择一个线程来执行(boost)

时间:2015-01-21 10:15:01

标签: boost boost-asio boost-thread

以下是我的一些代码。

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吗?当我写入文件时输出没有杂乱(没有互斥)?但是当我在没有互斥锁的情况下打印到控制台时,它会像你期望的那样混乱。

1 个答案:

答案 0 :(得分:0)

使用由原子更新,互斥体,信号量,条件变量等保护的全局变量的组合,有许多等效方法可以做到这一点。在我看来,最直接地传达你所做的事情的方式是什么?重新尝试做的是让你的线程在ticket lock等待,而不是代表他们到达锁的顺序的票号,它被选择为创建线程的顺序。您可以将这个想法与Boost spinlock example结合起来,以实现简单且可能高效的实现。