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

工程建设承包合同北京关键词优化报价

工程建设承包合同,北京关键词优化报价,网站建设+管理系统开发,信息技术课做网站使用互斥量时存在一个问题: 每次只能有一个线程获得互斥量的权限。如果在一个程序中有多个线程读取某个变量,使用互斥量时也必须排队。而实际上若只是读取一个变量,是可以让多个线程同时访问的,这样互斥量就会降低程序的性能。 例如&#xf…

使用互斥量时存在一个问题: 每次只能有一个线程获得互斥量的权限。如果在一个程序中有多个线程读取某个变量,使用互斥量时也必须排队。而实际上若只是读取一个变量,是可以让多个线程同时访问的,这样互斥量就会降低程序的性能。

例如,假设有一个数据采集程序,一个线程负责采集数据到缓冲区,一个线程负责读取缓冲区的数据并显示,另一个线程负责读取缓冲区的数据并保存到文件,示意代码如下:

int buffer [100];
QMutex mutex;
void threadDAQ::run()
{...mutex.lock();get_data_and_write_in_buffer(); //数据写入buffermutex.unclock();...
}void threadShow::run()
{...mutex.lock();show_buffer(); //读取buffer里的数据并显示mutex.unclock();...
}void threadSaveFile::run()
{...mutex.lock();Save_buffer_toFile(); //读取buffer里的数据并保存到文件mutex.unclock();...
}

数据缓冲区 buffer 和瓦斥量 mutex 都是全局变量,线程 threadDAO 将数据写到 buffer,线程threadShow 和 threadSaveFile 只是读取 buffer,但是因为使用互斥量,这3个线程任何时候都只能有一个线程可以访问 buffer。而实际上,threadShow 和 threadSaveFile 都只是读取 bufer 的数据,它们同时访问 buffer 是不会发生冲突的。

Qt 提供了 QReadWriteLock 类,它是基于读或写的模式进行代码段锁定的,在多个线程读写一个共享数据时,可以解决上面所说的互斥量存在的问题。

QReadWriteLock 以读或写锁定的同步方法允许以读或写的方式保护一段代码,它可以允许多个线程以只读方式同步访问资源,但是只要有一个线程在以写方式访问资源时,其他线程就必须等待直到写操作结束。

QReadWriteLock 提供以下几个主要的函数:

  • lockForRead(),以只读方式锁定资源,如果有其他线程以写入方式锁定,这个函数会阻塞:
  • lockForWrite(),以写入方式锁定资源,如果本线程或其他线程以读或写模式锁定资源,这个函数就阻塞;
  • unlock(),解锁;
  • tryLockForRead(),是 lockForRead()的非阻塞版本;
  • tryLockForWrite(),是lockForWrite的非阻塞版本。

使用QReadWriteLock,上面的三线程代码可以改写为如下的形式:

int buffer [100];
QReadWriteLock Lock;
void threadDAQ::run()
{...Lock.lockForWrite();get_data_and_write_in_buffer(); //数据写入buffermutex.unclock();...
}void threadShow::run()
{...Lock.lockForRead();show_buffer(); //读取buffer里的数据并显示mutex.unclock();...
}void threadSaveFile::run()
{...Lock.lockForRead();Save_buffer_toFile(); //读取buffer里的数据并保存到文件mutex.unclock();...
}

这样,如果 threadDAQ 没有以 lockForWrite()锁定 Lock,threadShow 和 threadSaveFile 可以同时访问 buffer,否则 threadShow 和 threadSaveFile 都被阻塞;如果 threadShow 和 threadSaveFile 都没有锁定,那么 threadDAQ 能以写入方式锁定,否则 threadDAQ 就被阻塞。

QReadLocker 和 QWriteLocker 是 QReadWriteLock 的简便形式,如同 QMutexLocker 是QMutex 的简便版本一样,无需与unlock()配对使用。使用QReadLocker 和QWriteLocker,则上面的代码改写为:

int buffer [100];
QReadWriteLock Lock;
void threadDAQ::run()
{...QWriteLocker Locker(&Lock);get_data_and_write_in_buffer(); //数据写入buffer...
}void threadShow::run()
{...QReadLocker Locker(&Lock);show_buffer(); //读取buffer里的数据并显示...
}void threadSaveFile::run()
{...QReadLocker Locker(&Lock);Save_buffer_toFile(); //读取buffer里的数据并保存到文件...
}
http://www.dinnco.com/news/30860.html

相关文章:

  • 微信公众号搭建网站企业网站建设方案模板
  • 网站建设方案备案小程序开发教程
  • dede生成网站地图百度推广怎么开户
  • 大连教育培训网站建设投放广告的网站
  • 网站建设标准合同360网站收录
  • 国外的旅游网站开发企业推广网
  • 外贸公司如何做网站竞价托管 微竞价
  • 公众号购买网站北京百度网站排名优化
  • 个人如何建立网站seo网站关键词优化多少钱
  • 网站建设滨江教育培训班
  • 江苏网站建设小程序商城
  • 网站建设中需求分析说明书长沙seo网络公司
  • 深圳网站设计建设公司百度账户安全中心
  • 外贸网站 推广下列关于seo优化说法不正确的是
  • 做 爱 网站视频优化师是做什么的
  • 百度搜索不到我的网站外贸建站优化
  • 自己做的网站服务器开了进不去制作网站模板
  • 内蒙古城乡和住房建设厅网站seo的名词解释
  • 如何使网站做的更好企业宣传网站
  • 中英文网站切换自动点击关键词软件
  • app网站开发报价2022千锋教育培训收费一览表
  • 导航特效网站视频号视频下载助手app
  • 做门户网站需要注册公司吗电子商务营销策略有哪些
  • 国外做ui的网站j百度官网认证价格
  • 做中介开什么网站企业营销网站建设系统
  • 水平b2电子商务网站谷歌浏览器 安卓下载
  • 外贸网站外包网络营销服务外包
  • 网站建设 保障接单 计划seo北京优化
  • 网站改成自适应html网站模板免费
  • 网站后台发文章图片链接怎么做360推广客服电话是多少