教学linux系统编程线程同步_第1页
教学linux系统编程线程同步_第2页
教学linux系统编程线程同步_第3页
教学linux系统编程线程同步_第4页
教学linux系统编程线程同步_第5页
免费预览已结束,剩余15页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、 2内存100 字节,线程T1 2内存100 字节,线程T1 欲填1线程T2 欲填0。但如果T1 执行50 个字节失去cpu,T2 执 1. 资源共享(独享资源则不会2. 调度随机(3. 。 。,B 该。(。 ,B 该。(。 。 初始化一个互斥锁(互斥量1 pthead_mutex_tmuetx= pthread_mutex_destroy pthead_mutex_tmuetx= pthread_mutex_destroy 函数 pthread_mutex_unlock 函数 pthread_mutex_trylock 函数 lock unlock 。后,T2T3T4 unlocklock。

2、 EBUSY:#include#include while(1)o sleep(rand()lock。 EBUSY:#include#include while(1)o sleep(rand()%3); /*模拟长时间操作共享资源,导致cpu易主,产生与时间有关的错误*/ pthread_twhile(1)O sleep(rand()%sleep(rand()%return 0; , f前后,分别加lock和 main flag = 5 在while中- main flag = 5 在while中- 在. 2. 1A锁,请求获得B2BA1. (读锁2. (写锁3. pthread_rwlock

3、_init pthread_rwlock_init 函 pthread_rwlock_rdlock 函数 函 函 函 函 #include函 函 函 #include#include t,i=while(1)t = counter;f(=write%d:%lu:counter=%d+counter=%dn,i,pthread_self(),t,+counter); i= while(1)read%d:%lu:%dn,i,pthread_self(),i= while(1)read%d:%lu:%dn,i,pthread_self(),pthread_t tid8; for(i=0; i3; f

4、or (i = 0; i 5; i+) for(i=0; inext; while (1) mp-num = rand() % 1000 + 1;head = mp;sleep(rand() % 5);argc,char, 如直接使用 sem_init sem_trywait 如直接使用 sem_init sem_trywait t sem_tsem; sem0信号量基本操作:| sem_init sem_init sem_destroy sem_wait t sem_trywait - (sem_waitlock和 sem_timedwait LL); time_tcur= structti

5、mespect; timespec 结构体变量t t.tv_sec = cur+1; 定时 1 秒 sem_timedwait(&sem,&t); LL); time_tcur= structtimespect; timespec 结构体变量t t.tv_sec = cur+1; 定时 1 秒 sem_timedwait(&sem,&t); 定义两个信号量:S0S为空 Tt(S空T t(S满假设: 线程到达的顺序是:T 生、T 生、T 那么: T1 S空-1S满+1 T 2 到达,S 空已经为 0, 阻塞T消 到达,将 S满-1S空 oworld 主要应用函数 主要应用函数 进程mutex #

6、include#include #includestructmt fd,structmt;memset(mm,0, ;memset(mm,0, pthread_mutex_init(&mm-mutex, &mm-mutexattr);mutex=if=0)for (i = 0; i 0)for(i=0;inum += 2;区【 fcntlcmd,./*arg*/F_SETLK(structflock*) 设置文件锁F_SETLKW(structcmd,./*arg*/F_SETLK(structflock*) 设置文件锁F_SETLKW(structflock*) 设置文件锁(lock)WF_

7、GETLK(structflock*) structflockshort l_type; off_t l_start; off_t l_len;_t 锁的类型:F_RDLCK 、F_WRLCK 、F_UNLCK 进程间文件锁示例:#include#include argc,charstructflockif(argc 2) if(fd=open(argv1,O_RDWR) 5个线程; 5- 5left(左手)right(右手i = (:ABC5123if(i=left=i,right =left=i,right=在:左:0if(i=left=i,right =left=i,right=在:左:04)if(i=left=0,right=left=i,right=while若,左右手都加锁成功-吃- 吃完-1. 2. 保证资源的获取顺序,要求每个线程获取资源的顺序一致。如:A1、2、3;B1、2、 3。若 B 为 3、2、1 则易出现死锁现象。; 5 if(i5) 5 if

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论