Я новый в теме в c. Мой код имеет поток, который увеличивает счетчик, а иногда (случайно) другой поток считывает этот счетчик. Я использовал мьютекс в этом коде, но мой код всегда дает мне значение, равное 1. Хотя я использовал pthread_mutex_unlock, но кажется, что значение становится заблокированным навсегда. что я должен сделать, чтобы решить эту проблему?Мьютекс фиксирует значение в функции навсегда
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <sys/fcntl.h>
#include <pthread.h>
///////////////////////////
long int count=0;
int RunFlag=0;
pthread_mutex_t mtx;
void *readfun(void *arg)
{
while (RunFlag==0)
{
pthread_mutex_lock(&mtx);
count=count+1;
pthread_mutex_unlock(&mtx);
}
}
void *printfun(void *arg)
{
int RadnTime=0;
for (int j=0;j<4;j++)
{
RadnTime=rand()%3+1;
sleep(RadnTime);
printf("The current counter after %d seconds is: ",RadnTime);
pthread_mutex_lock(&mtx);
printf("%d\n",count);
pthread_mutex_unlock(&mtx);
}
}
void main()
{
pthread_t thread1;
pthread_t thread2;
pthread_mutex_init(&mtx, NULL);
pthread_create(&thread1,NULL,readfun,NULL);
pthread_create(&thread2,NULL,printfun,NULL);
//stop the counter
RunFlag=1;
pthread_exit(NULL);
}
Это приведет к тому, что данные гонки пройдут. – 2501
Конечно, есть. RunFlag записывается в один поток, будучи прочитанным в другом, без защиты. – 2501
Вы правы. Я сейчас работаю, огромное спасибо :) –