Вот мои вопросы. У меня есть два потока writer1 и writer2, которые изменяют атрибуты struture, писатель1 пишет в атрибуте1, пишет writer2 в атрибуте2. И у меня есть поток Reader, который читает структуру. Я жду, когда: Когда писатель1 пишет, writer2 также может писать одновременно. (Это не вызывает проблемы, потому что они изменяют разные атрибуты). Конечно, когда писатель2 пишет, writer1 также может писать одновременно. Но когда читатель читает значение структуры, ни writer1, ни writer2 может писать в том же time.I Shoule убедитесь, что значение Читаю не меняются другими потокамиЧитатель и писатель в многопоточном языке на C++
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;
}
Хотя вы используете довольно продвинутые функции C++, такие как lambdas и threads, у вас, похоже, проблемы с некоторыми более базовыми C++-вещами, например, с использованием 'typedef' для структур, который не нужен, поскольку имя структуры является именем типа. Осуществление, например. 'struct data {...};' будет делать 'data' тип. –
Что касается вашей проблемы, посмотрите на [атомную библиотеку C++] (http://en.cppreference.com/w/cpp/atomic). –
Это может быть тонкая проблема, чтобы полностью решить; два атрибута могут совместно использовать строку кэша. Семантика C++ для 'std :: mutex' и' std :: atomic' может использоваться для правильного кода, но это может быть не так быстро. Что касается того, что «Читатель» одновременно блокирует обоих авторов, это, по-видимому, ошибка дизайна. Поскольку записи несвязаны и, следовательно, нелогичны, чтения могут быть независимыми. Это означает, что Reader может использовать два замка последовательно, а не одновременно. – MSalters