2017-01-16 2 views
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; 
} 

現在、私は変数が同じデータを操作しないので、クリティカルセクションはないとは思わない。しかし、私はこれについては分かりません。私はクリティカルセクションとマルチスレッド化についてはかなり新しいです。

+0

外部発信者がこれらの機能を呼び出すことは可能でしょうか?これらの関数には内部状態はありませんが、データ構造にアクセスするときにそれらの並列呼び出しが深刻な問題を引き起こす可能性があります。だから私の推薦:それらを使用するときにそれらをロックする。 – KimKulling

+0

答えに感謝します!あなたは外の呼び出し元がどういう意味ですか?単一のプロセス内の複数のスレッドがコード部分を実行しているが、他のプロセス内のスレッドやスレッドはコード部分を実行していないことに注意してください。 – Dos

+0

あなたが尋ねた質問に@Dosが答える:そうでない場合、そのコードの中に同期プリミティブは全くありません。しかし、それが操作されているデータが一度に1つのスレッドからしか触れられていない場合、これは必ずしも悪いことではありません。 – Mgetz

答えて

2

コードにはグローバル変数や静的変数はありません。

他のタイプの共有リソースはありません(別の場所で同じファイルが使用されているなど)。

したがって、ここには重要なセクションはありません。

関連する問題