0

これが私の質問です。構造体の属性を変更する 2 つのスレッド writer1 と writer2 があり、writer1 は属性 1 に書き込み、writer2 は属性 2 に書き込みます。そして、構造を読み取るスレッドリーダーがあります。私が待っているのは、writer1 が書き込みを行っているときに、writer2 も同時に書き込むことができることです (異なる属性を変更するため、問題は発生しません)。もちろん、writer2 が書き込みを行っているときに、writer1 も同時に書き込みを行うことができます。しかし、Reader が構造体の値を読み取っている場合、writer1 も writer2 も同時に書き込むことはできません。読み取っている値が他のスレッドによって変更されていないことを確認する必要があります。

例:

typedef struct
{
    int a;
    double b;

} data;

data glob;

int main()
{

    thread reader([]()
    {
        while(1)
        {
            sleep(1s);
            cout << glob;
        }
    });

    thread writer1([]()
    { 
        while(1)
            glob.a++;
    });
    thread writer2([]()
    { 
        while(1)
            glob.b++;
    });

    int i;
    cin >>i;
}
4

2 に答える 2

0

ミューテックスを使用するだけです ;) 使い方は非常に簡単で、問題を解決します。 http://en.cppreference.com/w/cpp/thread/mutex

于 2016-05-30T09:23:42.507 に答える