Ответ семафор .Вы можете использовать двоичный семафор для синхронизации ваших потоков.
Вы можете использовать System V семафоры или pthread мьютексы, но они как-то унаследованы в C ++.Используя ответ Tsuneo Yoshioka , мы могли бы реализовать способ семафора на C ++.
#include <mutex>
#include <condition_variable>
class Semaphore {
public:
Semaphore (int count_ = 0)
: count(count_) {}
inline void notify()
{
std::unique_lock<std::mutex> lock(mtx);
count++;
cv.notify_one();
}
inline void wait()
{
std::unique_lock<std::mutex> lock(mtx);
while(count == 0){
cv.wait(lock);
}
count--;
}
private:
std::mutex mtx;
std::condition_variable cv;
int count;
};
Ваша реализация может использовать класс Semaphore
, например, так.
void do_computation()
{
//calculate 1000 digits of Pi.
semaphore.notify();
}
int main()
{
Semaphore semaphore(0);
std::thread td1(&do_computation);
semaphore.wait();
}