例題6 1 並行程式模擬(deque的使用)

2021-08-09 01:58:51 字數 1288 閱讀 6271

例題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介面來實現相...