欢迎来到Introzo百科
Introzo百科
当前位置:网站首页 > 科学 > semwait

semwait

日期:2023-09-22 10:02

baci定理?

Baci定理

C语言中的平台

BACI是一个可以编写并发程序的环境,在这种并行的编译环境中,可以把BACI中的一些语句嵌入到C++,C,Java等高等程序中,使程序可以并行执行。

基本介绍

BACI提供了一个可以编写并发程序的环境,在这个平台上,我们可以很容易的模拟程序的并发执行。

基于C++的BACI语法(C—BACI Compiler)该语法结构是在C++语法结构的基础上,增加一些并发语句扩展而来,一下是一些常用的并发语句

1. cobegin函数

在BACI系统中,并发进程与并发线程同步,多个进程可以并发的在cobegin 块中来并发执行,该函数必须在主函数中,语法结构为:cobegin {

proc1(...);proc2(...);. . . . procN(...);}

其中每个进程并发随机执行,每次执行的顺序可能会不一样,当所有的进程接受后,该函数结束。

2. Semaphores/Binarysem

信号量的(Semaphores)机制可以更方便的实现进程同步,Semaphores是一种如C中”int”一样的类 型,可以用来定义信号量类型的变量,Binarysem是一种二进制信号量,它所定义的变量只能取1或 0,用来表示互斥。

1).信号量的声明和初始化semaphores a;binarysem s;

上面声明了两个信号量a,b,其中b为二进制信号量信号量按如下方式初始化:

Initialsem(semaphores , interger);

Initialsem(binarysem , 0/1);

2)P(wait)/V(signal)函数强大的PV操作与信号量一次很方便的解决了并发进程同步与互斥问题

函数原型:

void p(semaphores &s); or void wait(semaphores &s);

void v(semaphores &s); or void signal(semaphores &s);

函数说明:

p(sem): 如果sem > 0,则sem减1,调用P的进程可以继续执行,如果sem=0,则该进程阻塞,该函数操作是原子性的.v(sem): 如果v=0,或有进程阻塞,则将其唤醒,如果没有进程等待,将sem加1,在任何时候调用v的进程可以继续执行,其操作也是原子的.

3.atomic

atomic关键字定义了原子操作,即该函数操作不可剥夺,每次只能一个进程访问用法:在要原子执行的函数前加atomic即可,如:atomic int sum(){. . . ..}

则sum()函数就可以原子操作了

4.void suspend(void)suspend函数将调用的线程挂起

5.void revive (int process_number)

该函数用于唤醒某个进程,其进程号为process_number

关灯