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