本文主要介绍c多线程安全问题(c多线程处理),下面一起看看c多线程安全问题(c多线程处理)相关资讯。
锁定的关键区域应该尽可能紧凑和小。
问题分析:
当一个线程在临界区执行时,其他所有试图进入临界区的线程都会被阻塞,所以我们要保证临界区尽可能小。举个例子,
void callhome(字符串消息){ std:: lock _ guardstd::mercex lock(mu);//临界段开始-保护std:: cout readfifthousandrecords;cout 线程和this _ thread:: get _ id 说 消息endl}// lock_guard对象被销毁,互斥mu被释放
readfifythousandrecords方法是一个只读操作,如果它从一个数据库中花费了10秒钟,就没有理由在锁中执行它。
如果读取5万条记录,其他所有线程都会被这个不必要的时间阻塞。会严重影响程序的执行效率。
正确的做法应该是只把std : : cout放入临界区,比如
void callhome(字符串消息){ readfifythosandrecords;//唐 不需要在临界区,因为它 s一个只读操作std:: lock _ guardstd::mercex lock(mu);//临界区开始-保护std:: cout cout 线程和this_thr::get _ id 说 消息endl}// lock_guard对象被销毁,互斥mu被释放
标签:
关键线程
了解更多c多线程安全问题(c多线程处理)相关内容请关注本站点。