2012-04-12 4 views
1

私は、以下のような関数から一意のトランザクションIDを要求するために複数のスレッドを必要とするアプリケーションをC言語で作成しています。mutexを使わずにトランザクションIDが一意になるように、複数のスレッド間でどのように同期できますか?

struct list{ 
    int id; 
    struct list *next 
}; 

function generate_id() 
{ 
    linked-list is built here to hold 10 millions 
} 

mutexを使用せずにトランザクションIDが一意になるように、2つ以上のスレッド間で同期する方法はありますか?

リンクリストを別のものに変更する必要がある場合でも、何かを共有してください。

+0

私には、トランザクションIDの生成がリンクされたリストにどのように関係しているかはわかりません。 IDの生成方法に関する知識は、適切な答えに必要なIMOです。 –

答えて

0

私が最初に(私が間違っているなら、私を修正)あなたがやろうとしているかを推測してみましょう:

は、各スレッドから「generate_id」機能を呼び出し、各リンクリストに固有のIDを割り当てるにはグローバルカウンタを操作しますノード。

この場合、明らかに相互排除が必要です。ミューテックスに加えて、「テスト・アンド・テスト・アンド・セット」や「コンペ・アンド・スワップ」などのアトミック操作を使用することによっても達成できます。

関連する問題