在C++中实现信号量可以使用std::mutex和std::condition_variable来实现。下面是一个简单的示例代码来展示如何使用这两个类来实现信号量:
#include <iostream>#include <thread>#include <mutex>#include <condition_variable>class Semaphore {public: Semaphore(int count) : count(count) {} void wait() { std::unique_lock<std::mutex> lock(mutex); while (count <= 0) { cv.wait(lock); } count--; } void signal() { std::unique_lock<std::mutex> lock(mutex); count++; cv.notify_one(); }private: int count; std::mutex mutex; std::condition_variable cv;};Semaphore semaphore(1);void process() { for (int i = 0; i < 5; i++) { semaphore.wait(); std::cout << "Thread ID: " << std::this_thread::get_id() << " is executing" << std::endl; semaphore.signal(); }}int main() { std::thread t1(process); std::thread t2(process); t1.join(); t2.join(); return 0;}在这个示例代码中,我们定义了一个Semaphore类,其中包含wait和signal方法用于等待和通知信号量。在process函数中,我们创建了两个线程来模拟多个进程同时执行,每个线程在执行前会等待信号量,然后执行完毕后通知信号量。通过使用std::mutex和std::condition_variable来实现信号量,我们可以实现多个进程之间的同步。




