Я пытаюсь перевести сценарий ниже, используя темы.
procA {
while (TRUE) {
update(x);
retrieve(y);
}
}
procB {
while (TRUE) {
retrieve(x);
update(y);
}
}
Написал код для этого, который я предоставил ниже:
#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
#include <unistd.h>
#define WORK_SIZE 10
pthread_mutex_t work_mutex;
int wa1[WORK_SIZE];
int wa2[WORK_SIZE];
void *funA(void *);
void *funB(void *);
int main(){
pthread_t tid1,tid2;
if(pthread_create(&tid1,NULL,funA,(void *)wa1))
perror("pthread_create");
if(pthread_create(&tid2,NULL,funB,(void *)wa2))
perror("pthread_create");
pthread_join(tid1,NULL);
pthread_join(tid2,NULL);
return 0;
}
void *funA(void *ptr){
int *x=ptr;
int i=0,j,num;
//sleep(1);
while(i<=10){
num=rand();
*x=num;
x+1;
j=*wa2;
printf("A: %d\n",j);
wa2+1;
i++;
}
return NULL;
}
void * funB(void *ptr){
int *y=ptr;
int a=0,b,num;
while(a<=10){
num=rand();
b=*wa1;
printf("B: %d\n",b);
wa1+1;
*y=num;
y+1;
a++;
}
return NULL;
}
Мне необходимо внедрить MUTEX, но это появится позже.На данный момент, насколько я понимаю, оба потока должны выполняться одновременно, и, следовательно, адрес, указанный в * wa1 и * wa2, должен обновляться одновременно.Кажется, мне чего-то не хватает, из-за чего генерируется вывод: Включен бесконечный цикл.Обновленный o / p, показанный ниже (только часть выходных данных)
A: 1258442020
A: 803738656
A: 803738656
A: 803738656
A: 803738656
A: 803738656
A: 803738656
A: 803738656
A: 803738656
A: 803738656
A: 803738656
A: 803738656
A: 803738656
A: 803738656
A: 803738656
A: 803738656
B: 1317969989
A: 803738656
A: 1251276256
A: 1251276256
A: 1251276256
A: 1251276256
A: 1251276256
A: 1251276256
A: 1251276256
A: 1251276256
A: 1251276256
A: 1251276256
A: 1251276256
B: 1851766329
B: 455345464
B: 455345464
B: 455345464
B: 455345464
B: 455345464
B: 455345464
B: 455345464
B: 455345464
B: 455345464
B: 455345464
B: 455345464
B: 455345464
B: 455345464
B: 455345464
B: 455345464
Похоже, что после бесконечного цикла происходит переключение контекста, но я все еще не ясно, на выходе.Случайная функция должна сгенерировать новое число, но оно повторяется.Любые предложения, пожалуйста, и как это можно назвать проблемой производителя-потребителя Как я могу реализовать эту проблему лучше, чем тот, который я реализовал
спасибо.