這裏的想法是創建要寫入的文件。我正在嘗試創建10個線程,並將它們打印到每個文件10次。使用信號量來停止多個線程一次寫入文件。一切都編譯完成,我沒有得到錯誤退出,但是我不明白爲什麼要多次運行該程序:1)它不會向文件打印100行,實際上它少得多2)打印到該文件每次都有所不同。在C中使用信號量進行多線程處理
#include <stdio.h>
#include <sys/types.h>
#include <stdlib.h>
#include <unistd.h>
#include <pthread.h>
#include <semaphore.h>
#define READ "r"
#define NEW "w"
#define ADD "a"
#define NL "\n"
#define TAB "\t"
#define FNAME "PROCTAB.txt"
#define MAX_STRING_LEN 80
#define NUMBER_OF_THREADS 10
FILE *fp;
sem_t mutex;
int counter;
FILE *makeTextFile(char *fname, char mode){
FILE *localFP;
localFP = fopen(fname, &mode);
return (localFP);
}
void *print_message(void *tid){
int i;
for (i = 0; i < 10; i++){
sem_wait(&mutex);
fp = fopen(FNAME, ADD);
fprintf(fp, "Thread %d is running.\n", tid);
fclose(fp);
sem_post(&mutex);
}
}
int threads(){
const char *fName = "PROCTAB.txt";
int status;
pthread_t threads[NUMBER_OF_THREADS];
fp = makeTextFile(FNAME, 'w');
fprintf(fp, "Process ID: %ld\n", (long)getpid());
fclose(fp);
int i;
for (i =0; i < NUMBER_OF_THREADS; i++){
status = pthread_create(&threads[i], NULL, &print_message, (void *)i);
if (status != 0){
printf("pthread_create returned error code %d\n", status);
exit(-1);
}
}
return 0;
}
我的主要功能包含在一個單獨的文件中。
測試'fp'在'FP = FOPEN(FNAME,ADD);',以確保你沒有打開文件成功的所有時間你以爲你做到了。還可以將fp局部化爲'print_message()'。 – chux