java 和 c 共享内存_C/C++共享内存中的等待与通知

在你的标题中,你把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上的一些其他优点:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值