我正在尝试创建一个包含多个文件的程序,将它们全部附加到一个大文件中。每个附加必须由一个单独的线程完成。
/*
This program creates appends several files together
*/
#include <pthread.h>
#include <semaphore.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
pthread_t *tids;
void *threadout(void *num);
int main(int argc, char *argv[])
{
int numOfFiles = atoi(argv[2]);
int error;
int index;
sem_t sem;
//Used for output file
int outFile;
//Checking to make sure there is the correct number of arguments
if (argc != 4)
{
printf("%s \n", "Wrong number of arguments, exiting program.");
return 1;
}
//checking to make sure there are at least two files to append
if (numOfFiles < 2)
{
printf("%s \n", "Cannot append 1 file or less.");
return 1;
}
//opening/creating file
outFile = open(argv[3], O_WRONLY | O_CREAT, S_IRUSR);
///****************** Allocate space for thread ids ******************/
tids = (pthread_t *)calloc(numOfFiles, sizeof(pthread_t));
if (tids == NULL)
{
perror("Failed to allocate memory for thread IDs");
return 1;
}
if (sem_init(&sem, 0, 1) == -1)
{
perror("Failed to initialize semaphore");
return 1;
}
/****************** Create threads *********************************/
for (index = 0; index < numOfFiles; index++)
{
if (error = pthread_create(tids + index, NULL, threadout, &index))
{
fprintf(stderr, "Failed to create thread:%s\n", strerror(error));
return 1;
}
}
return 0;
}
void * threadout(void *num)
{
printf("Hello");
return NULL;
}
在程序的底部附近,我实际创建了线程。线程应该做的第一件事是点击“threadout”函数。然而,我可以获得任何打印的唯一方法是,如果我说要创建大量的线程。因此,如果我告诉我的程序创建5000个线程,将打印“Hello”。不过5000次。如果我要求它创建10个线程,则不打印任何内容。当我调用“threadout”时,我做错了吗?感谢
答案 0 :(得分:3)
Returning from main
causes your entire program to exit,即使其他线程正在运行。
启动所有线程后,main
函数退出。如果您开始使用大量线程,则会留下足够的时间来打印第一个线程。如果你开始使用几个线程,它会在第一个线程打印之前返回。
您可能希望使用pthread_join
(每个线程调用一次)来等待所有线程终止。