据说这是一道google或百度什么的面试题,具体不清楚,老师布置的需求。
题目是这样的:
同时往四个文件里写A、B、C、D,顺序分别为:
File1:A , B , C , D , A , B , C , D……
File2:B , C , D , A , B , C , D , A……
File3:C , D , A , B , C , D , A , B……
File4:D , A , B , C , D , A , B , C……
我的思路是:
创建四个线程,每个线程分别就写A、B、C、D,然后按照一定顺序写进文件。同时通过互斥量,防止某线程操作某文件时其他线程访问。
源代码:
#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
#include <unistd.h>
pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
pthread_cond_t cond = PTHREAD_COND_INITIALIZER;
FILE *fd[4];
int num = 0;
void *writeThread(void *arg)
{
int i;
int tnum = (int)arg;
int count = tnum;
for(i = 0; i < 12; i++)
{
pthread_mutex_lock(&mutex);
while(tnum != num)
{
pthread_cond_wait(&cond, &mutex);
}
fd[0] = fopen("file1", "a+");
fd[1] = fopen("file2", "a+");
fd[2] = fopen("file3", "a+");
fd[3] = fopen("file4", "a+");
putc('A' + tnum, fd[count]);
fclose(fd[0]);
fclose(fd[1]);
fclose(fd[2]);
fclose(fd[3]);
num = (num + 1) % 4;
count = (count + 3) % 4;
pthread_mutex_unlock(&mutex);
pthread_cond_broadcast(&cond);
}
}
int main()
{
int i;
pthread_t id[4];
for(i = 0; i < 4; i++)
{
if(pthread_create(&id[i], NULL, (void *)writeThread, (void *)i))
{
printf("create id[%d] error!\n");
}
}
for(i = 0; i < 4; i++)
{
pthread_join(id[i], NULL);
}
return 0;
}