C++中如何实现信号量以同步多个进程

avatar
作者
筋斗云
阅读量:1

在C++中实现信号量可以使用std::mutexstd::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类,其中包含waitsignal方法用于等待和通知信号量。在process函数中,我们创建了两个线程来模拟多个进程同时执行,每个线程在执行前会等待信号量,然后执行完毕后通知信号量。通过使用std::mutexstd::condition_variable来实现信号量,我们可以实现多个进程之间的同步。

广告一刻

为您即时展示最新活动产品广告消息,让您随时掌握产品活动新动态!