BACI提供了一個可以編寫並發程式的環境,在這個平台上,我們可以很容易的模擬程式的並發執行,在這種並行的編譯環境中,可以把BACI中的一些語句嵌入到C++,C,Java等高等程式中,使程式可以並行執行 .
基於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