0
次のコード部分は、1つのプロセスで複数のスレッドによって定期的に呼び出されています。ここでの質問は、重要なセクションですか?次のコードに重要なセクションがありますか?
まずコード:
struct object {
struct object *nxt;
};
void delete(object **top, object *deletable) {
object *current, *pred;
if (*top == deletable) {
*top = deletable->nxt;
} else {
pred = top;
current = (*top)->nxt;
while (current && (current != deletable)) {
pred = current;
current = current->nxt;
}
if (current) {
pred = current->nxt;
}
}
第二の符号;
int shift(int param) {
int result = 654321;
result = result^param;
param = param * result;
result = (param >> 9)^~result;
return result;
}
現在、私は変数が同じデータを操作しないので、クリティカルセクションはないとは思わない。しかし、私はこれについては分かりません。私はクリティカルセクションとマルチスレッド化についてはかなり新しいです。
外部発信者がこれらの機能を呼び出すことは可能でしょうか?これらの関数には内部状態はありませんが、データ構造にアクセスするときにそれらの並列呼び出しが深刻な問題を引き起こす可能性があります。だから私の推薦:それらを使用するときにそれらをロックする。 – KimKulling
答えに感謝します!あなたは外の呼び出し元がどういう意味ですか?単一のプロセス内の複数のスレッドがコード部分を実行しているが、他のプロセス内のスレッドやスレッドはコード部分を実行していないことに注意してください。 – Dos
あなたが尋ねた質問に@Dosが答える:そうでない場合、そのコードの中に同期プリミティブは全くありません。しかし、それが操作されているデータが一度に1つのスレッドからしか触れられていない場合、これは必ずしも悪いことではありません。 – Mgetz