用c语言创建5个线程,sleep一个随机的时间后,对同一个文件写,创建另外1个线程,读出5个线程写的文件内容
时间: 2024-05-11 20:13:54 浏览: 63
以下是一个简单的实现:
```
#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
#include <unistd.h>
#define NUM_THREADS 5
void *write_file(void *arg);
void *read_file(void *arg);
int main()
{
int i, rc;
pthread_t threads[NUM_THREADS+1];
srand(time(NULL));
// 创建5个写文件的线程
for (i = 0; i < NUM_THREADS; i++) {
rc = pthread_create(&threads[i], NULL, write_file, (void *)i);
if (rc) {
fprintf(stderr, "Error: Failed to create thread %d\n", i);
exit(EXIT_FAILURE);
}
}
// 创建读文件的线程
rc = pthread_create(&threads[NUM_THREADS], NULL, read_file, NULL);
if (rc) {
fprintf(stderr, "Error: Failed to create thread %d\n", NUM_THREADS);
exit(EXIT_FAILURE);
}
// 等待所有线程结束
for (i = 0; i <= NUM_THREADS; i++) {
pthread_join(threads[i], NULL);
}
return 0;
}
void *write_file(void *arg)
{
int id = (int)arg;
char filename[20];
sprintf(filename, "file%d.txt", id);
// 随机等待一段时间
int sleep_time = rand() % 5 + 1;
sleep(sleep_time);
// 写入文件
FILE *fp = fopen(filename, "w");
if (fp) {
fprintf(fp, "This is thread %d writing to file %s\n", id, filename);
fclose(fp);
} else {
fprintf(stderr, "Error: Failed to open file %s for writing\n", filename);
}
pthread_exit(NULL);
}
void *read_file(void *arg)
{
int i;
char filename[20];
char buffer[100];
// 读取所有文件内容
for (i = 0; i < NUM_THREADS; i++) {
sprintf(filename, "file%d.txt", i);
FILE *fp = fopen(filename, "r");
if (fp) {
printf("File %s contents:\n", filename);
while (fgets(buffer, 100, fp)) {
printf("%s", buffer);
}
fclose(fp);
} else {
fprintf(stderr, "Error: Failed to open file %s for reading\n", filename);
}
}
pthread_exit(NULL);
}
```
该程序首先创建5个写文件的线程,每个线程随机等待1~5秒后,将一条消息写入以线程id命名的文件中。然后创建另外一个线程来读取这些文件的内容,并将其输出到控制台上。最后,等待所有线程结束并退出程序。
注意,在实际应用中,需要考虑线程之间的同步和互斥问题,以避免数据竞争和死锁等问题。
阅读全文