-1

概要:同期せずに同じメモリスペースにアクセスするリーダースレッドとライタースレッドがあります。実行時エラー(論理エラーではない)またはプロセスまたはスレッドを壊すリスクはありますか?

簡単なタスクスケジューラを作成しようとしています。

いくつかのワーカースレッドがあり、それらには独自のタスクキューがあります。

タスクスケジューラは、タスクをワーカーのキューにプッシュします。

スケジューラーに、キューが最も短い最もビジーでないスレッドを知らせたい。

したがって、各キューの長さを格納するために、いくつかの共有整数変数が必要です。

各ワーカースレッドは、特定の変数に独自のキューの長さを書き込みます。

そして、スケジューラーはその変数を読み取って、最短の変数を認識します。

したがって、各変数には1つの読み取りと1つの書き込みがあります。

これはRWの問題であり、ミューテックスが必要です。

しかし、私はオーバーヘッドを必要とせず、キューの正確な長さを知っています。

そのため、スレッドが同期せずに共有値にアクセスできるようにします。

不正確な値なしで問題はありますか?

4

1 に答える 1

0

すべてのプラットフォーム、すべての言語、およびすべての標準について、2つのスレッドが同期せずに同じメモリスペースにアクセスしたときに何が起こらなければならないかを示す法律はありません。一部のプラットフォームでは、それが許可され、同期が追加される場合があります。それは不可能ではありません。すべての場合にそれをテストし、プロセスがクラッシュすることを保証する人もいます。それも不可能ではありません。

この質問は一般的ですが、答えは何でもかまいません。「やるべきではないことをやったらどうなるの?」と聞いた方がいいかもしれません。

たとえば、POSIXを使用すると、プロセスをクラッシュさせることができます。Win32は、整列された32ビットアクセスの場合、最悪の場合、古い値を与える必要があります。普遍的な法則はありません。

于 2013-01-29T04:21:51.937 に答える