p、v原语的模拟实现c++代码
时间: 2024-05-11 21:19:08 浏览: 123
c++ vector模拟实现代码
以下是p、v原语的模拟实现c++代码:
```c++
#include <mutex>
#include <condition_variable>
using namespace std;
mutex mtx; // 互斥量
condition_variable cv; // 条件变量
int count = 0; // 资源数量
void p() {
unique_lock<mutex> lock(mtx);
while (count <= 0) { // 如果资源数量为0,则等待
cv.wait(lock);
}
count--;
}
void v() {
unique_lock<mutex> lock(mtx);
count++;
cv.notify_one(); // 唤醒一个等待线程
}
```
在上面的代码中,我们使用了`std::mutex`和`std::condition_variable`来实现p、v原语。`count`表示资源的数量,当资源数量为0时,线程会在条件变量`cv`上等待,直到资源数量不为0时被唤醒。在p操作中,我们使用了`std::unique_lock`来锁定互斥量,这样可以在等待时自动释放锁。在v操作中,我们将资源数量加1并调用`cv.notify_one()`来唤醒一个等待线程。
阅读全文