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

网站建设维护教程国外网站查询

网站建设维护教程,国外网站查询,asp.net 网站开发 pdf,帮非法集资公司做网站违法吗目录 1.常见锁概念 死锁 死锁四个必要条件 避免死锁 避免死锁算法 2. Linux线程同步 条件变量 同步概念与竞态条件 条件变量函数 初始化 销毁 等待条件满足 唤醒等待 简单案例: 条件变量使用规范 1.常见锁概念 死锁 死锁是指在一组进程中的各个进程均占有不会释放的…

目录

 

1.常见锁概念

死锁

死锁四个必要条件

避免死锁

避免死锁算法

2. Linux线程同步

条件变量

同步概念与竞态条件

条件变量函数 初始化

销毁

等待条件满足

唤醒等待

简单案例:

条件变量使用规范


 

1.常见锁概念

死锁

死锁是指在一组进程中的各个进程均占有不会释放的资源,但因互相申请被其他进程所站用不会释放的资源而处于的一种永久等待状态。

死锁四个必要条件

  • 互斥条件:一个资源每次只能被一个执行流使用
  • 请求与保持条件:一个执行流因请求资源而阻塞时,对已获得的资源保持不放
  • 不剥夺条件:一个执行流已获得的资源,在末使用完之前,不能强行剥夺
  • 循环等待条件:若干执行流之间形成一种头尾相接的循环等待资源的关系

避免死锁

  • 破坏死锁的四个必要条件
  • 加锁顺序一致
  • 避免锁未释放的场景
  • 资源一次性分配

避免死锁算法

  • 死锁检测算法(了解)

核心思想:通过监控系统资源分配状态,判断是否存在死锁的必要条件(尤其是循环等待),并在检测到死锁时触发恢复机制。

  • 银行家算法(了解)

核心思想:通过预先判断资源分配是否会导致系统进入 “不安全状态”(可能引发死锁的状态),来拒绝或允许资源请求,确保系统始终处于 “安全状态”。

2. Linux线程同步

条件变量

  • 当一个线程互斥地访问某个变量时,它可能发现在其它线程改变状态之前,它什么也做不了。
  • 例如一个线程访问队列时,发现队列为空,它只能等待,只到其它线程将一个节点添加到队列中。这种情况就需要用到条件变量。

同步概念与竞态条件

  • 同步:在保证数据安全的前提下,让线程能够按照某种特定的顺序访问临界资源,从而有效避免饥饿问题,叫做同步
  • 竞态条件:因为时序问题,而导致程序异常,我们称之为竞态条件。在线程场景下,这种问题也不难理解

条件变量函数 初始化

int pthread_cond_init(pthread_cond_t *restrict cond,const pthread_condattr_t *restrict 
attr); 
参数: cond:要初始化的条件变量 attr:NULL 

销毁

int pthread_cond_destroy(pthread_cond_t *cond) 

等待条件满足

int pthread_cond_wait(pthread_cond_t *restrict cond,pthread_mutex_t *restrict mutex); 参数: cond:要在这个条件变量上等待 mutex:互斥量,后面详细解释

唤醒等待

int pthread_cond_broadcast(pthread_cond_t *cond); 
向所有等待在该条件变量上的线程发送通知,唤醒所有等待线程。这些线程会在获取互斥锁后继续执行。
int pthread_cond_signal(pthread_cond_t *cond); 
向至少一个等待在该条件变量上的线程发送通知,唤醒至少一个线程(具体唤醒哪个线程由调度器决定)。若有多个线程等待,通常只唤醒一个。

简单案例:

#include <stdio.h> 
#include <stdlib.h> 
#include <string.h> 
#include <unistd.h> 
#include <pthread.h> pthread_cond_t cond; 
pthread_mutex_t mutex; void *r1( void *arg ) 
{ while ( 1 ){ pthread_cond_wait(&cond, &mutex); printf("活动\n"); } 
} void *r2(void *arg ) 
{ while ( 1 ) {
pthread_cond_signal(&cond); sleep(1); } 
} int main( void ) 
{ pthread_t t1, t2; pthread_cond_init(&cond, NULL); pthread_mutex_init(&mutex, NULL); pthread_create(&t1, NULL, r1, NULL); pthread_create(&t2, NULL, r2, NULL); pthread_join(t1, NULL); pthread_join(t2, NULL); pthread_mutex_destroy(&mutex); pthread_cond_destroy(&cond); 
}  

这段代码的主要功能就是让2个线程分别执行:一个一直等待,另一个每隔1秒唤醒它打印。

为什么 pthread_cond_wait 需要互斥量?

  • 条件等待是线程间同步的一种手段,如果只有一个线程,条件不满足,一直等下去都不会满足,所以必须要有一个线程通过某些操作,改变共享变量,使原先不满足的条件变得满足,并且友好的通知等待在条件变量上的线程。
  • 条件不会无缘无故的突然变得满足了,必然会牵扯到共享数据的变化。所以一定要用互斥锁来保护。没有互斥锁就无法安全的获取和修改共享数据。

  • 按照上面的说法,我们设计出如下的代码:先上锁,发现条件不满足,解锁,然后等待在条件变量上不就行了,如下代码:
// 错误的设计 pthread_mutex_lock(&mutex); while (condition_is_false) { pthread_mutex_unlock(&mutex); //解锁之后,等待之前,条件可能已经满足,信号已经发出,但是该信号可能被错过 pthread_cond_wait(&cond); pthread_mutex_lock(&mutex); } pthread_mutex_unlock(&mutex); 
  • 由于解锁和等待不是原子操作。调用解锁之后, 但是在调用pthread_cond_wait 之前,执行被切走了,切到了另一个signal通知线程,他获取到互斥量,摒弃条件满足,发送了信号,但是我们之前那个线程并没有处于等待(还未调用),所以可以理解为等待队列为空,那么我们回到原先的线程的时候再去调用 pthread_cond_wait 将错过这个信号,可能会导致线程永远阻塞在这个 pthread_cond_wait 。所以解锁和等待必须是一个原子操作。
  • 调用 pthread_cond_wait() 时,线程必须已持有互斥锁 mutex。函数会原子性地释放该锁,并将线程放入 cond 的等待队列。当其他线程发送信号(如调用 pthread_cond_signal())唤醒该线程时,pthread_cond_wait() 会自动尝试重新获取锁。线程只有在成功获取锁后才能从 pthread_cond_wait() 返回,继续执行后续代码。

条件变量使用规范

  • 等待条件代码
pthread_mutex_lock(&mutex); while (条件为假) pthread_cond_wait(cond, mutex); 修改条件 pthread_mutex_unlock(&mutex); 
  • 给条件发送信号代码
pthread_mutex_lock(&mutex); 设置条件为真 pthread_cond_signal(cond); pthread_mutex_unlock(&mutex); 

 


文章转载自:

http://xnRu8ZRX.jxwhr.cn
http://rxfEFVv9.jxwhr.cn
http://Zml5D3yl.jxwhr.cn
http://OjmBizuc.jxwhr.cn
http://ZQOAbrzx.jxwhr.cn
http://huQfT8ck.jxwhr.cn
http://ehrHbUSg.jxwhr.cn
http://qSiKfwOa.jxwhr.cn
http://MDxt7e6M.jxwhr.cn
http://70E4KgHs.jxwhr.cn
http://NtUx9qEq.jxwhr.cn
http://1GQHUUvg.jxwhr.cn
http://fxzIbINr.jxwhr.cn
http://ziXjPufZ.jxwhr.cn
http://mpdOeY7D.jxwhr.cn
http://tD7ppG3w.jxwhr.cn
http://2lkEGaxV.jxwhr.cn
http://XX3teiiD.jxwhr.cn
http://gC0FT7c8.jxwhr.cn
http://ThzszU8V.jxwhr.cn
http://tPjp0SK9.jxwhr.cn
http://Pgn9VRTq.jxwhr.cn
http://ufvp4tJz.jxwhr.cn
http://Ci0J05CU.jxwhr.cn
http://j72bRF4k.jxwhr.cn
http://rs2W4EAb.jxwhr.cn
http://ZVO5TpYO.jxwhr.cn
http://FvVy7y4f.jxwhr.cn
http://S3VmMfwC.jxwhr.cn
http://fEQPLJBl.jxwhr.cn
http://www.dtcms.com/wzjs/684775.html

相关文章:

  • 给个人网站做百度百科网站运营总监
  • 响应式网站效果图做多大的免费下载软件大厅
  • 物流网站开发项目书django wordpress
  • 长沙鞋网站建设团队网站源码
  • 哈尔滨哪里做网站wordpress linux下载
  • seo查询 站长工具网站建设应重视后期的服务和维护
  • 北京建设工程交易服务中心网站seo推广优化服务
  • 网站搭建一般要山东省建设安全监督站的网站
  • 靓号网站开发网站建设公司厂
  • 秦皇岛抚宁区建设局网站wordpress 用户组
  • 响应式建设网站杭州做宠物网站的公司哪家好
  • 和建设银行类似的网站折800网站程序
  • 鞍山手机网站建设汽车门户网站建设
  • 网站优化+山东西安做网站公司那家好
  • 有没有在线做动图的网站游戏开发引擎
  • 做短视频网站全球新闻最新消息
  • 怎么整理网站龙岩有什么招聘本地网站
  • 制作公司网站应该考虑什么广州网站排名优化公司
  • 网站脑图怎么做盐城哪有做网站建设的
  • 国外的设计网站app吗西安网站设计师
  • 上海建智咨询培训网站网站什么时候备案
  • 美食网站设计的代码郑州专业网站建设公司
  • 查网站备案网络营销的未来6个发展趋势
  • 重庆网站建设百度推广wordpress 评论回复邮件通知插件
  • 网站开发一般需要多久青岛响应式网站开发
  • 黑河网站制作忘记密码wordpress
  • 我要做个网站建设路街道办事处门户网站
  • 网站备案在哪里审批项目从立项到施工的程序
  • 绍兴h5建站番禺建设网站系统
  • 如何建设一个生活服务网站做原型交互的网站工具