Вы хотите заблокировать мьютекс, прежде чем делать что-либо с переменной, которую вы пытаетесь защитить. Это включает в себя вашу функцию подсчета.
У меня сейчас нет среды Linux, но что-то вроде этого должновы попадете на правильный путь.
Как сказал комментатор, вам также необходимо использовать цикл в вашей функции подсчета.В противном случае вы получите только одно значение.То, как вы управляете циклом, будет зависеть от того, как именно вы хотите, чтобы данные передавались.Вполне возможно, вам понадобится второй мьютекс для этого.
Опять же, имейте в виду, что вы хотите заблокировать мьютекс, прежде чем делать что-либо с вашей защищенной переменной в любом месте, к которому у вас есть доступ.Даже чтение его без блокировки приведет к поведению, которое не гарантированно будет точным.
void *inputThread(void * args) {
FILE *input = fopen("hw4.in", "r");
while(!feof(input)) {
//printf("Thread locked.\n");
/*-------- Right below here you acces value by trying to insert input to it
using fscanf(input, "%d\n", &value)
so you need to lock the mutext before doing that */
pthread_mutex_lock(&mutex);
fscanf(input, "%d\n", &value);
printf("value: %d\n", value);
//printf("Thread unlocked.\n");
pthread_mutex_unlock(&mutex);
}
fclose(input);
pthread_exit(NULL);
}
void *counting(void *args) {
while(some_condition) {
// you also try to access value in this method so you need to use the mutex
pthread_mutex_lock(&mutex);
printf("Value: %d\n", value);
pthread_mutex_unlock(&mutex);
} // End while(some_condition)
pthread_exit(NULL);
}
Дайте мне знать, если у вас есть какие-либо проблемы с этим.
Похоже, что это назначение может бытьпытаясь представить проблему производителя-потребителя.Я думаю, что дальнейшее чтение поможет вам в будущем.
Перечитав ваш ответ, я думаю, что именно проблема производителя и потребителя - именно то, что вы хотите сделать.Если вы сделаете это, как вы упомянули в редактировании, то реализация в основном однопоточная.Это на самом деле не научит вас тому, к чему, как мне кажется, урок пытается добраться.
Некоторые вещи, которые будут полезны для знания
- Круговые буферы
- Проблема производителя-потребителя
- Обучение тому, как избежать тупика с несколькими мьютексами