【发布时间】:2015-11-08 08:31:36
【问题描述】:
我正在做一个家庭作业,我必须用 C 语言编写一个多线程 linux 程序来解决操作系统类的生产者-消费者问题。在我的代码中,我有一个 while 循环,它位于由单个线程运行的函数内部。在该函数中,我有一个变量的增量,该变量受mutex 保护。
问题在于,while 循环运行的时间有时会超出我的预期。例如,当我希望循环执行16 次时,它有时会执行17 次。我无法弄清楚这个错误的原因,但它似乎与线程有关。我已经最小化了我的代码,问题仍然可以重现。
#include <stdio.h>
#include <string.h>
#include <pthread.h>
#include <stdlib.h>
#include <fcntl.h>
#include <errno.h>
int numItems = 16;
pthread_t threadID;
pthread_t threadID2;
pthread_mutex_t mutex;
pthread_attr_t attr;
void *produce(void *param);
int numItemsProduced = 0;
int main(int argc, char *argv[])
{
pthread_attr_init(&attr);
// Initialize mutex.
if (pthread_mutex_init(&mutex, NULL) != 0)
{
printf("%s\n", "An error occured while initializing mutex!");
}
pthread_create(&threadID, &attr, produce, NULL);
pthread_create(&threadID2, &attr, produce, NULL);
pthread_join(threadID, NULL);
pthread_join(threadID2, NULL);
printf("Finished.\n");
}
void *produce(void *param)
{
printf("In thread.\n");
while (numItemsProduced < numItems)
{
pthread_mutex_lock(&mutex);
printf("Current while loop is at int %d\n", numItemsProduced);
numItemsProduced++;
pthread_mutex_unlock(&mutex);
}
pthread_exit(0);
}
为什么while 循环有时会执行额外的时间?我相信我正确使用了mutex。
【问题讨论】:
标签: c multithreading while-loop pthreads mutex