例題6-1:並行程式模擬
題意:
給定n個程式,每種程式有五種操作,分別為 var = constant(賦值),print var (列印), lock, unlock,end 變數用小寫字母表示,初始化為0,為程式所公有(乙個程式裡對某個變數修改可以會影響其他程式裡的這個變數),常數小於100(也就是說最多兩位數)。每個時刻都只能有乙個程式處於執行狀態,其他的都在等待,上述五種操作用時分別是t1, t2, t3, t4, t5。執行中的程式每次最多能執行q個時間,當q個時間被用完後,它會被放在等待佇列的尾部,然後再從首部取出乙個程式執行,初始等待佇列按輸入順序,
但是lock和unlock會改變順序,它們總是成對出現,不會出現巢狀。如果某個程式已經執行了lock,後面還有程式執行lock,那麼這個程式就會馬上被放到乙個阻止佇列的尾部(當然如果執行時間還沒用完也就浪費了)。當unlock結束後,阻止佇列中的第乙個程式進入等待佇列的首部。問你程式的執行結果是什麼,輸出格式是第幾個程式加冒號加空格加結果,兩個相連的資料用空行隔開。
#include
#include
#include
#include
#include
#include
#include
using
namespace
std;
const
int maxn=1005;
bool lock;
deque
qr;queue
qw;vector
sta[maxn];
int var[26],p[maxn],t[maxn];
int q;
void run(int i)
else
if(cur[2]=='i')
else
if(cur[2]=='c')
else lock=true;
}else
if(cur[2]=='l')
}else
return;
++p[i];
}qr.push_back(i);
}int main()
qr.push_back(i);
}memset(p,0,sizeof(p));
memset(var,0,sizeof(var));
while(!qr.empty())
if(cas) printf("\n");
}return
0;}
UVa210 並行程式模擬
重點在於字串處理和雙端佇列的實現,一般的佇列是隊首出隊,隊尾入隊。題目的情景是,當乙個程序解除上鎖時,處於阻止佇列隊首的程序直接插入到等待佇列的隊首。處理輸入的時候,將每個程序作為乙個結構體,裡面維護當前程序執行到第幾條指令,當前程序包含的指令,每條指令對應的型別,程序id,以及該程序包含幾條指令。...
併發程式與並行程式
併發程式是指可以被同時發起執行的程式 並行程式被設計成可以在並行的硬體上執行的併發程式。併發程式代表了所有可以實現並發行為的程式,它是乙個寬泛的概念,其中包含了並行程式。inter process communication 程序間通訊 go支援的ipc方法有管道 訊號和socket.程序 我們把乙...
Java並行程式基礎
程序是計算機中的程式關於某資料集合上的一次運動活動,是系統進行資源分配的基礎單位。程序是執行緒的容器。程式是指令 資料及其組織形式的描述,程序是程式的實體。執行緒的所有狀態都在thread的state列舉中 public enum state t1.start 也可以使用runnable介面來實現相...