我正在尝试使用线程来翻译以下方案。
     

procA {
     while (TRUE) {

      update(x);

     retrieve(y);
      }
     }
     procB {
     while (TRUE) {
     retrieve(x);

     update(y);

      }
     }

Have written the code for this which I have provided below:

#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(仅输出的一部分)

一个: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
乙:1317969989
A:803738656
一个:1251276256
一个:1251276256
一个:1251276256
一个:1251276256
一个:1251276256
一个:1251276256
一个:1251276256
一个:1251276256
一个:1251276256
一个:1251276256
一个:1251276256
乙:1851766329
乙:455345464
乙:455345464
乙:455345464
乙:455345464
乙:455345464
乙:455345464
乙:455345464
乙:455345464
乙:455345464
乙:455345464
乙:455345464
乙:455345464
乙:455345464
乙:455345464
乙:455345464


似乎在无限循环之后,发生了上下文切换,但是我仍然不清楚输出。随机函数应该生成一个新数字,但是相同的数字正在重复。请提出任何建议,以及如何将其称为生产者-消费者问题我如何实施此问题是比我已经实施的更好的方式

谢谢。

最佳答案

十次迭代是如此之少,以至于它们在上下文切换发生之前就已经得到了处理,因此您不会看到任何并发性。很抱歉,我无法从您的代码中真正得知任何信息,因为它缺少缩进,注释和良好的变量名。

10-08 11:32