当前位置: 首页 > news >正文

网站聊天系统怎么做网络媒体平台

网站聊天系统怎么做,网络媒体平台,制作表情包的软件,企业彩铃制作网站std::recursive_timed_mutex允许同一线程多次获取锁#xff0c;并提供了超时功能。 这种锁特别适合用在递归函数中#xff0c;或者当一个操作可能在同一线程内多次尝试获取同一锁时使用。 与std::timed_mutex一样#xff0c;std::recursive_timed_mutex也提供了try_lock_f…std::recursive_timed_mutex允许同一线程多次获取锁并提供了超时功能。 这种锁特别适合用在递归函数中或者当一个操作可能在同一线程内多次尝试获取同一锁时使用。 与std::timed_mutex一样std::recursive_timed_mutex也提供了try_lock_for()和try_lock_until()方法。 下面通过两个使用std::recursive_timed_mutex的示例展示它在递归函数中的用法以及如何利用超时机制。 try_lock_for()用法示例 假设我们有一个递归函数recursive_access该函数在每一层递归中都尝试获取同一个锁。 我们使用std::recursive_timed_mutex来避免死锁并利用超时机制在不能获取锁时做出适当的响应。 #include iostream #include mutex #include thread #include chronostd::recursive_timed_mutex rtmx;void recursive_access(int level, int maxLevel) {// 使用try_lock_for尝试带超时的锁定if (rtmx.try_lock_for(std::chrono::milliseconds(100))) {if (level maxLevel) {std::cout Level level - Lock acquired by thread std::this_thread::get_id() std::endl;// 递归调用进入下一层recursive_access(level 1, maxLevel);rtmx.unlock();} else {std::cout Max recursion level maxLevel reached, unlocking... std::endl;}rtmx.unlock();} else {// 超时处理逻辑std::cout Thread std::this_thread::get_id() could not acquire the lock at level level std::endl;} }int main() {std::thread t1(recursive_access, 0, 3);std::thread t2(recursive_access, 0, 3);t1.join();t2.join();return 0; }在这个例子中我们定义了一个递归函数recursive_access它尝试获取一个std::recursive_timed_mutex。 通过try_lock_for我们设置了一个100毫秒的等待时间如果在这段时间内成功获取了锁则递归调用继续执行如果等待超时则输出一条消息并不再进入下一层递归。 我们启动了两个线程t1和t2执行同一个递归函数由于std::recursive_timed_mutex的使用即使是在递归调用中这两个线程也能够安全地竞争资源。 同时超时机制确保了在锁竞争激烈的情况下线程不会无限等待。 try_lock_until()用法示例 #include iostream #include mutex #include chrono #include threadstd::recursive_timed_mutex rtmx;void recursive_attempt_to_lock_until(int id, const std::chrono::time_pointstd::chrono::system_clock timeout_time, int depth) {if (rtmx.try_lock_until(timeout_time)) {std::cout Thread id acquired the lock at depth depth std::endl;if (depth 3) {recursive_attempt_to_lock_until(id, timeout_time, depth 1); // 递归尝试锁定}std::this_thread::sleep_for(std::chrono::seconds(1)); // 模拟工作rtmx.unlock();} else {std::cout Thread id failed to acquire the lock at depth depth std::endl;} }int main() {auto timeout_time std::chrono::system_clock::now() std::chrono::seconds(3);std::thread t1(recursive_attempt_to_lock_until, 1, timeout_time, 1);std::thread t2(recursive_attempt_to_lock_until, 2, timeout_time, 1);t1.join();t2.join();return 0; }输出 Thread 1 acquired the lock at depth 1 Thread 1 acquired the lock at depth 2 Thread 1 acquired the lock at depth 3 Thread 2 failed to acquire the lock at depth 1总结 std::recursive_timed_mutex提供了一种灵活的方式来处理需要在同一线程中多次获取锁的情况特别是在递归调用场景中。超时功能也增加了程序的健壮性防止了因等待锁而导致的潜在死锁。
http://www.zqtcl.cn/news/204496/

相关文章:

  • 建站平台备案wordpress 论坛
  • 朗域装饰公司电话中卫网站推广优化
  • 公司用dw做网站吗做外贸翻译用那个网站
  • 希尔顿酒店网站建设的优点网站建设添加汉语
  • 贵阳利于优化的网站wordpress模糊搜索插件
  • 河南做网站最好的公司门户网站制度建设
  • 新余 网站建设公司浏览不良网页的危害
  • 长春做网站哪里好西安有什么网页设计公司
  • 昆明网站建设精英免费自己建网页
  • 网站开发框架 开源买的有域名怎么做网站
  • 为什么做电商网站成都在哪建设网站
  • 有没有做请帖的网站南漳网站制作
  • 项目信息网站哪个好企业开展网络营销方案
  • 网站开发制作费入会计科目做毕业设计个人网站任务书
  • 自己建一个网站微信指数官网
  • 产品推广网站模板哪里有做网站的素材
  • 网站界面要素村网站开设两学一做栏目
  • 临沂免费模板建站河北邢台手机网站建设
  • 企业网站栏目规划的重要性wordpress改变为中文
  • 云服务器怎么上传网站个人建一个网站多少钱
  • 东莞网站建设包装制品flash网站制作
  • 办网站怎么赚钱做二手电脑的网站
  • 大型电子商务网站建设成本旅游网站前台怎么做
  • 深圳网站建设..网站点击图片放大
  • 上海企业扶持政策洛阳400电话洛阳网站seo
  • 保亭县住房城市建设局网站app免费制作平台下载
  • 抚州市建设局网站在网站做商城平台需要哪些资质
  • 潍坊专业网站建设多少钱素马设计官网
  • 深圳网站建设 套餐近期新闻事件
  • 网站开发外包维护合同淘宝客源码程序 爱淘宝风格+程序自动采集商品 淘宝客网站模板