Читатель и писатель в многопоточности в C++
Вот мои вопросы. У меня есть два потока writer1 и writer2, которые изменяют атрибуты struture, writer1 пишет в attribut1, writer2 пишет в attribut2. И у меня есть читатель потока, который читает структуру. Чего я жду, так это: когда writer1 пишет, writer2 также может писать одновременно (это не вызывает проблем, потому что они изменяют различные атрибуты). Конечно, когда writer2 пишет, writer1 также может писать одновременно. Но когда Reader читает значения структуры, ни writer1, ни writer2 не могут писать одновременно. Я должен быть уверен, что значение, которое я читаю, не изменяется другими потоками
Exemple:
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;
}
2 ответа
Один конец плоскости решения - один мьютекс и одна условная переменная, общие для авторов и читателей.
Противоположный конец - две атомные переменные и читатель, вращающийся между ними.
И архитектурно наиболее чистый (и также быстрый, когда все сделано правильно) - очередь входящих сообщений для читателя, под ключом идентификатора писателя, поэтому два сообщения от одного писателя не могут быть поставлены в очередь.
Просто используйте mutex;) Он очень прост в использовании и решит проблему. http://en.cppreference.com/w/cpp/thread/mutex