阅读量:1
在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
来实现信号量,我们可以实现多个进程之间的同步。