ProtoThreads - Producer&Consumer

Swedish Institute of Computer ScienceAdam Dunkels写的模拟解决生产者-消费者问题的C语言代码,在这个文件包里主要的文件有pt.h,pt-sem.h,lc.h,lc-switch.h,lc-addrlabel.h,详细请看http://www.sics.se/~adam/pt/pt-1.4-refman/main.html。接下来,我将我对这些代码的一些想法描述。

3.1.1     信号量

信号量的编写主要在pt-sem.h里完成的。

1、    信号量数据结构的定义

struct pt_sem {

  unsigned int count;

};

count就是此信号量的值。

2、    信号量的初始化

#define PT_SEM_INIT(s, c) (s)->count = c

s是一个指向该信号量的指针,而c是该信号量初始化的值。

3、    信号量等待

#define PT_SEM_WAIT(pt, s)     /

  do {                                        /

    PT_WAIT_UNTIL(pt, (s)->count > 0);             /

    --(s)->count;                       /

  } while(0)

pt是一个指向线程数据结构的指针,s是一个指向该信号量的指针。为了看懂这个程序还需明白PT_WAIT_UNTIL

#define PT_WAIT_UNTIL(pt, condition)            /

  do {                                        /

    LC_SET((pt)->lc);                      /

    if(!(condition)) {                         /

      return PT_WAITING;                     /

    }                                        /

  } while(0)

因此,可知,当(s)->count > 0成立时,即!(condition)不成立,则一直执行PT_WAIT_UNTIL;知道当(s)->count > 0不成立时,则!(condition)成立,则返回PT_WAITING状态,并将(s)->count1

4  信号量增加

#define PT_SEM_SIGNAL(pt, s) ++(s)->count

pts和上述的pts具有相同的性质。此时将(s)->count1,由PT_SEM_WAIT程序可知,只有当(s)->count的值变为大于等于0,线程才继续执行。

3.1.2     线程

线程数据和操作的定义主要在pt.h里。

1、    线程数据结构的定义

struct pt {

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值