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