1

以下に示すように、関数から一意のトランザクションIDを要求するために複数のスレッドを必要とするアプリケーションをCで作成しています。

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

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

2つ以上のスレッド間で同期して、ミューテックスを使用せずにそれらのスレッド間でトランザクションIDを一意にするにはどうすればよいですか?

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

4

1 に答える 1

0

最初にあなたが何をしようとしているのかを推測させてください(間違っている場合は修正してください):

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

その際、明らかに相互排除が必要です。ミューテックスに加えて、「test-and-test-and-set」や「compare-and-swap」などのアトミック操作を使用して実現することもできます。

于 2012-04-22T17:34:01.960 に答える