在C++中,wait()
函數本身不能直接修改,但您可以使用它來實現線程同步,從而間接地實現數據的修改。wait()
函數通常與條件變量(如std::condition_variable
)一起使用,以便在特定條件滿足時喚醒等待的線程。
以下是一個簡單的示例,展示了如何使用std::condition_variable
和std::mutex
來修改共享數據:
#include <iostream>
#include <thread>
#include <mutex>
#include <condition_variable>
std::mutex mtx;
std::condition_variable cv;
int shared_data = 0;
void worker() {
std::unique_lock<std::mutex> lock(mtx);
cv.wait(lock, []{ return shared_data != 0; }); // 等待共享數據不為0
// 在此處修改共享數據
shared_data = 42;
// 通知其他等待的線程
cv.notify_all();
}
int main() {
std::thread t1(worker);
std::thread t2(worker);
t1.join();
t2.join();
std::cout << "Shared data: " << shared_data << std::endl;
return 0;
}
在這個示例中,我們使用std::condition_variable
來確保在修改共享數據(shared_data
)之前,所有等待的線程都已經進入等待狀態。當shared_data
變為非零值時,條件變量會通知所有等待的線程,它們將醒來并繼續執行,從而可以安全地修改共享數據。