У меня есть этот код, здесь нужно синхронизировать использование глобальной переменной c? Возможно ли, что потоки начнут работать в одно и то же время, и один поток перезапишет результат другого потока и в итоге получит либо 2, либо 7?Необходимо синхронизировать использование глобальной переменной
#include <iostream>
#include <stdio.h>
#include <pthread.h>
#include <stdlib.h>
int c = 0;
void* write(void*)
{
c += 2;
}
void* read(void*)
{
c += 7;
}
int main()
{
pthread_t t1;
pthread_t t2;
std::cout << "first C = " << c << std::endl;
int r1 = pthread_create(&t1, 0, &write, 0);
int r2 = pthread_create(&t2, 0, &read, 0);
pthread_join(t1, 0);
pthread_join(t2, 0);
std::cout << " C = " << c << std::endl;
return 0;
}
Вы знакомы с мьютексами и блокировкой? Редактировать: Это классическая проблема читателей-писателей: http://en.wikipedia.org/wiki/Readers%E2%80%93writers_problem – AndyG
Да, я знаком с мьютексами, спасибо за URL. –