«одновременно (одно за другим)» противоречиво.При звонке на sleep()
они запускаются одновременно.Без вызова sleep()
они запускаются один за другим.При выводе только 100 строк поток t1 завершается до того, как t2 изменится, чтобы начать выполнение.На моем компьютере мне пришлось установить счетчик циклов на 10000, прежде чем t1 побежал достаточно долго для запуска t2, пока t1 все еще выполнял:выполнение потоков выполняется по очереди, boost::condition_variable
является решением:
boost::mutex mutex;
boost::condition_variable cv;
void thread()
{
for (int i = 0; i < 100; ++i)
{
boost::unique_lock<boost::mutex> lock(mutex);
std::cout << "Thread " << boost::this_thread::get_id() << ": " << i << std::endl;
cv.notify_one();
cv.wait(lock);
}
cv.notify_one();
}