2016-05-27 232 views
0

VxWorks 6.9でバイナリセマフォを使用して2つのタスクをどのように同期できますか?私はそれをどのように行うことができますVxWorksでセマフォを使用して2つのタスクを同期させる方法は?

Z Z ....

A、BのBのCのC:

私は、出力は次のようになりたいですか?

あなたが持っているために、SEM_FULLオプションを使用してT1を作成する必要があります

#include <taskLib.h> 
#include <stdio.h> 
#include <kernelLib.h> 
#include <semLib.h> 
SEM_ID t1,t2; 
int task(void) 
{ 
    char i; 
    for(i='a';i<='z';i++) 
    { 
    // semTake(t1,WAIT_FOREVER); 
    // semTake(t2,WAIT_FOREVER); 
      printf("%c ",i); 
    // semGive(t2); 
    } 
} 
int task2(void) 
{ 
    char i; 
    for(i='A';i<='Z';i++) 
    {  
    // semTake(t2,WAIT_FOREVER); 
    // semTake(t1,WAIT_FOREVER); 
      printf("%c ",i); 
    // semGive(t1); 
    } 
} 
void Main(void) 
{ 
    int id1,id2; 
    t1= semBCreate(SEM_Q_PRIORITY, SEM_EMPTY); 
    t2 = semBCreate(SEM_Q_PRIORITY, SEM_EMPTY); 
    id1=taskSpawn("First",120,0,1000,(FUNCPTR) task, 0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0); 
    id2=taskSpawn("Second",120,0,1000,(FUNCPTR) task2, 0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0);  
} 
+0

バリアセマフォが必要です。このセマフォは、指定されたポイントで各スレッドを同期させます。この場合、それはforループの終わりです。 – Nishant

+0

あなたは@Nishantを手に入れませんでした。私のコードを編集することができます..? –

+0

以上は何とかコメントしています。なぜこれは動作しないのですか?何らかの理由で@Nishant –

答えて

0

test.cの "最初の" タスクが最初に実行されます。最初のタスクはt1をとり、t2を与えます。第2のタスクはt2をとり、t1を与える。

関連する問題