Multithreading c++;11线程无锁睡眠/唤醒?

Multithreading c++;11线程无锁睡眠/唤醒?,multithreading,c++11,Multithreading,C++11,我在两个线程之间使用无锁队列。一个产生数据,另一个消耗数据。我想做的是,当队列为空时,使用者线程将产生cpu,直到生产者线程将数据推送到队列。我不能调用sleep(),因为我认为没有办法唤醒睡眠线程。我发现的是std::condition_变量,但它需要一个互斥体。生产者线程需要持有锁,然后为每次数据推送通知消费者线程。有没有更好更轻松的方法来实现我的目标?任何让线程睡眠和醒来的机制实际上都是一个锁。使用这种机制的数据结构不是无锁的。你不能同时拥有两者。也许您想重新考虑一下,为什么一开始您认为无

我在两个线程之间使用无锁队列。一个产生数据,另一个消耗数据。我想做的是,当队列为空时,使用者线程将产生cpu,直到生产者线程将数据推送到队列。我不能调用sleep(),因为我认为没有办法唤醒睡眠线程。我发现的是std::condition_变量,但它需要一个互斥体。生产者线程需要持有锁,然后为每次数据推送通知消费者线程。有没有更好更轻松的方法来实现我的目标?

任何让线程睡眠和醒来的机制实际上都是一个锁。使用这种机制的数据结构不是无锁的。你不能同时拥有两者。也许您想重新考虑一下,为什么一开始您认为无锁队列是一个好主意。如果平台上有posix信号量,您可以探索posix信号量,即
sem_post
sem_wait
等。但与性能比较一样,请测量这两种方法(信号量和条件变量)以确定哪种方法,此外,在C++20中,可能存在对信号量的本机支持(而不是使用posix)和