0
uint32 abc(int i)
{
    pthread_mutex_lock(&sharedvar_mutex[i]);

    sharedvar[i][j] = getvalue(i,j);

    pthread_mutex_unlock(&sharedvar_mutex[i]);
}

この使い方は正しいですか?

これは次のように機能しますか: i は 1 または 2 で、j はグローバル定数であるとします。i=1 の thread-A がこの関数を呼び出してミューテックス sharevar_mutex[1] を取得し、sharedvar[1][j] を変更します。関数に入ると i=1 のスレッド B はミューテックスで待機します。

i=2 のスレッド C は、mutex に入って取得でき、sharesvar_mutex[2] を取得し、sharedvar[2][j] を変更します。

このように機能しますか?

ありがとう!

4

1 に答える 1

0

はい、そのように動作します。

考慮したいことが 1 つあります。ミューテックスの配列を使用して、特定の i に対して getvalue 関数が同時に実行されるのを防ぎ、sharedvar[] に割り当てるときに競合状態を防ぐように見えます。特定の i に対して getvalue が同時に実行されるのを防ぎたい場合は、これで問題ない可能性があります。ただし、配列に整数を設定するときに競合状態を防ぐためだけにミューテキストを使用することは、アトミック操作と比較してやり過ぎです。

于 2012-04-07T22:52:59.207 に答える