在你的标题中,你把C和C++混合在一起,随意地变成了“C/C++”。我希望,你不是在写一个混合了两者的程序。
如果你使用C++ 11,你会发现一个可移植的(和因为C++,so)更安全的,更容易使用的替代pPoX(在POSIX系统上,它通常在引擎盖下使用pPosits)。
你可以使用
std::condition_variable
+
std::mutex
等待/通知。
This example
说明如何:
#include
#include
#include
#include
#include
std::mutex m;
std::condition_variable cv;
std::string data;
bool mainReady = false;
bool workerReader = false;
void worker_thread()
{
// Wait until main() sends data
{
std::unique_lock<:mutex> lk(m);
cv.wait(lk, []{return mainReady;});
}
std::cout << "Worker thread is processing data: " << data << std::endl;
data += " after processing";
// Send data back to main()
{
std::lock_guard<:mutex> lk(m);
workerReady = true;
std::cout << "Worker thread signals data processing completed\n";
}
cv.notify_one();
}
int main()
{
std::thread worker(worker_thread);
data = "Example data";
// send data to the worker thread
{
std::lock_guard<:mutex> lk(m);
mainReady = true;
std::cout << "main() signals data ready for processing\n";
}
cv.notify_one();
// wait for the worker
{
std::unique_lock<:mutex> lk(m);
cv.wait(lk, []{return workerReady;});
}
std::cout << "Back in main(), data = " << data << '\n';
// wait until worker dies finishes execution
worker.join();
}
这段代码还突出了C++在C上的一些其他优点: