博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
锁,信号量,条件变量-unix课程的个人体会
阅读量:5365 次
发布时间:2019-06-15

本文共 1543 字,大约阅读时间需要 5 分钟。

只是将原来由信号量的value改成现在的 cheld(bool) 开始用false表示没锁 接下来 Acquier()后就有锁 当release()后重新获得锁 --释放锁 其余的改变主要是条件变量是要用到 isheldbycurrenThread() 用到保存当前线程的cheldThread线程变量指针.

条件变量: wait(); 直接添加进条件变量的队列 锁放开 睡觉 锁的获得(竞争锁) signal();

条件变量不会向锁一样需要死循环的等到能进入缓冲区所以释放不需要改变 value与cheld的值以让别人不需要死循环或 判断是否需要执行与 判断该是否还可以执行。

信号量与锁与条件变量的差别: 通过信号量与 cheld cheldthread  作为锁 通过 通过记录队列里面的线程个数来判断是否该还能够出队列

用信号量实现是初始值为0 因为只要p()就要让他直接阻塞掉。

缓冲区:

类分别为: Lock Condition  lock->Acquire();      lock->Release();  BufferEmpty->Wait(lock);   BufferFull->Signal(lock);

一个锁lock 两个条件变量BufferEmpty BufferFull 缓冲区最大值:BufferSize 缓冲区实际值:number  缓冲区数组:Buffer[]   缓冲区标志 element[]; free指针方法: delete

构造:初始化 析构:free指针

读缓冲区:一次读 size个  读后要把标志变为0  void BoundedBuffer::Read(void *data, int size) // read 'size' bytes from the bounded buffer, storing into 'data'. // ('size' may be greater than 'maxsize') 锁临界区   循环里用双指针用以说明 边界与读取的个数 为空时 i重新为0 判断空 阻塞本线程,挂到空条件变量队列里

不空时 如果原来是满状态, 则发信号给等在满队列里的线程。

关掉临界区

写缓冲区             写后要把标志变为1 void BoundedBuffer::Write(char *data, int size) // write 'size' bytes from 'data' into the bounded buffer. // ('size' may be greater than 'maxsize') 锁临界区 判断满状态  i重新从0开始 否则的话读取字符到data 里面 当缓冲区里面的数据个数加了1后是1时 发信号给空条件变量的队列 写缓冲区

table类:

Lock lock int size void **list(具体用来存放内容) 表里面包含: 一个锁:Lock void  *L(作为一个线性指针表)  int Size表大小

~Table() //析构函数   Re 自己的全部值 删除两个指针 Table(int size); // create a table to hold at most 'size' entries. 初始化表元素个数 int Alloc(void *object);//分配单元的函数  还回正确序号 void *Get(int index);//确定单元地址的函数 由序号到指针 void Release(int index);//释放序号上面的值

 

转载于:https://www.cnblogs.com/xjx-user/archive/2012/12/05/2803340.html

你可能感兴趣的文章
安全-分析深圳电信的新型HTTP劫持方式
查看>>
将Centos的yum源更换为国内的阿里云源
查看>>
git diff 的用法
查看>>
一段sql的优化
查看>>
十进制与十六进制的相互转换
查看>>
在Flex中用Validator检测数字、字符串、Email.
查看>>
[leetcode]4Sum
查看>>
POJ1062 昂贵的聘礼
查看>>
【零基础学习iOS开发】【02-C语言】08-基本运算
查看>>
Java 将指定字符串连接到此字符串的结尾 concat()
查看>>
Hibernate Criterion
查看>>
Python知识
查看>>
我们为什么要搞长沙.NET技术社区(三)
查看>>
杭电acm Cake
查看>>
js函数中this的指向
查看>>
c++ 引用方式传递数组
查看>>
HBase学习之路 (九)HBase phoenix的使用
查看>>
LeetCode() Remove Duplicates from Sorted Array II
查看>>
【svn】idea svn 文件上会出现一个破书
查看>>
cocos2d-x 3.0 场景切换特效汇总(转)
查看>>