2012-09-10 72 views
1

我想在搶先線程調度環境中編寫一個並行程序,我可以使用互斥鎖(總是初始化爲未佔用的二進制互斥鎖),等待指令以及線程合作指令(屈服於線程中的另一個任務)到同步我的線程,但沒有任何信號機制可用(實際上,我正在爲我的程序編寫樂高Mindstorm的編程語言NXC)。如何在NXC中控制線程的執行順序?

有沒有辦法寫有兩個線程一個程序和生成的執行順序像(A B A B A B ...)? [它就像有一個線程包含一個循環調用兩個函數A()和B() - 但這裏,它是在多線程時尚]

如果我有信號量,我想我會這樣做:

semaphore SemA = 1, SemB=0; 
//in A 
{ 
    while(true) 
    { 
    down(SemA); 
    //Do the things 
    up(SemB); 
    } 
} 
//in B 
{ 
    while(true) 
    { 
    down(SemB); 
    //Do the things 
    up(SemA); 
    } 
} 
+0

您可以使用'priority'語句(或者它是一個編譯器指令?)來幫助確定每個進程的優先級。您可以使用「主線程」和一些互斥來控制執行哪些線程。 –

+1

另外,請嘗試在Mindboards論壇上提問。 –

回答

0

不知道這是否會工作,但你可以用一個互斥量和Yield功能嘗試。如果A和B是兩個唯一的任務,我想它會一直從一個切換到另一個,但我無法測試,因爲我沒有NXT了。

mutex sync; 
//in A 
{ 
    while(true) 
    { 
     Acquire(sync); 
     //Do the things 
     Release(sync); 
     Yield(); 
    } 
} 
//in B 
{ 
    while(true) 
    { 
     Acquire(sync); 
     //Do the things 
     Release(sync); 
     Yield(); 
    } 
}