>我正在开发一个程序,该程序将从文件中读取不同的行,并为每个线程启动一个线程,其中它将根据行上的写入器执行各种操作,但是我不断收到分段错误错误,我不知所措地试图解决它。
我试图遵循这个问题线程中的所有内容:将指针 char 参数传递给线程中的函数
但它仍然不起作用。线程函数将是:
void *thread(void *arg)
{
char *buf = arg;
char *tok, *sp;
//extracting transaction type
tok = strtok_r(buf, " ", &sp);
//Branchement selon le type de transaction
switch(tok[0]){
...
}
并将被这部分称为:
void* readTranslinkedINFO(char* nomFichier){
FILE *f;
char buffer[100];
pthread_t tid;
//Opening file
f = fopen(nomFichier, "rt");
if (f==NULL)
error(2, "readTrans: Erreur lors de l'ouverture du fichier.");
//read first line
fgets(buffer, 100, f);
//start a thread for each line
while(!feof(f)){
pthread_create(&tid, NULL, thread, buffer);
//reading next line
fgets(buffer, 100, f);
}
pthread_join(tid, NULL);
//closing file
fclose(f);
//Return
return NULL;
任何帮助将不胜感激对不起,如果这里和那里还有一些法语单词谢谢
- 为什么"while ( !feof (file) )"总是错误的?
- 您有数据争用,因为相同的地址
buffer
传递给所有线程。您可以使用strdup()
将每行的副本传递给每个线程,线程函数可以处理释放它。 - 您没有保存线程 ID,因此您只与创建的最后一个线程联接。
- 始终对所有可能失败的函数(pthread_create、fget 等)进行错误检查。
- 只处理一行的线程不会非常有效 - 但我认为这是出于学习/教育目的。否则,这种多线程实现会适得其反。假设您有一个包含一百万行的数据文件。创建一百万个线程既不好又不太可能奏效。