Я пытаюсь определить задержку от ядра к ядру при простом совместном использовании памяти. Моя цель - прочитать глобальную переменную из двух разных потоков. Допустим, переменная х = 0 в начале. Теперь один поток прочитает значение и изменит x на 1. Другой поток читает ту же переменную, и как только он читает x = 1, он равен 0. Я написал следующий код:
#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
#include <sys/time.h>
double getsecs(void)
{
struct timeval tv;
gettimeofday(&tv, NULL);
return tv.tv_sec + tv.tv_usec / 1.0e6;
}
int x=0;
//count=0;
void* changetoone(void *arg)
{
//sched_setaffinity(0);
for (int i=0; i<10000; i++){
while(x!=1)
{
x=1;
printf("%d", x);
}
}
return 0;
}
void* changetozero(void *arg){
//sched_setaffinity(5);
for (int i=0; i<10000; i++){
while(x!=0)
{
x=0;
printf("%d", x);
}
}
return 0;
}
int main()
{
pthread_t thread1;
pthread_create(&thread1, NULL, changetoone, &x);
pthread_t thread2;
pthread_create(&thread2, NULL, changetozero, &x);
pthread_join(&thread1, NULL);
pthread_join(&thread2, NULL);
}
По какой-то причине код не работает. Я не знаком с использованием pthread и думаю, что сделал несколько глупых ошибок. Кто-нибудь может указать на ошибку для меня, пожалуйста?