C程序只在调试时写入文件

C程序只在调试时写入文件,c,multithreading,file,threadpool,C,Multithreading,File,Threadpool,我正在编写一个简单的代码来测试线程池。我有一个客户端,它通过不同的端口向服务器发送数据行。 一些线程接收数据,然后将其发送给其他线程进行处理。 目前,我所做的唯一处理就是将数据写入一个文件 下面是工作线程的代码 void* worker_thread(void* arg){ int i, workerNum; pthread_t worker_id = pthread_self(); char *ticket = (char*) arg; char dumpfil

我正在编写一个简单的代码来测试线程池。我有一个客户端,它通过不同的端口向服务器发送数据行。 一些线程接收数据,然后将其发送给其他线程进行处理。 目前,我所做的唯一处理就是将数据写入一个文件

下面是工作线程的代码

void* worker_thread(void* arg){
    int i, workerNum;
    pthread_t worker_id = pthread_self();
    char *ticket = (char*) arg;
    char dumpfile[50];
    for(i=0;i<10;i++)  
        if(pthread_equal(worker_id, id_pool[i]))
        break;
    if(10==i){
        pthread_exit(NULL);
    }
    workerNum = i;
    fprintf(stdout, "Worker [%d] busy\n",workerNum);
    sprintf(dumpfile, "worker_%d.log",workerNum);
    if(strlen(ticket)<4){
        fprintf(stdout, "Worker [%d] RELEASED!!\n",workerNum);    
        poolStatus[workerNum] = 0;
        pthread_mutex_unlock(&mutexes[workerNum]);
        pthread_exit(NULL); 
    }
    FILE *logFile = fopen(dumpfile, "a+");
    // ticket[strlen(ticket)]
    fprintf(logFile,  "%s\n", ticket);
    fclose(logFile);
    sleep(workerNum+2);
    poolStatus[workerNum] = 0;
    fprintf(stdout, "Worker [%d] RELEASED!!\n",workerNum);
    pthread_mutex_unlock(&mutexes[workerNum]);
    pthread_exit(NULL); 
}
void*辅助线程(void*arg){
int i,workerNum;
pthread_t worker_id=pthread_self();
字符*票证=(字符*)参数;
字符转储文件[50];

对于(i=0;i我相信我已经找到了问题

为了将消息从
serverListener
thread传递到
worker\u thread
,我使用了用于从套接字读取的缓冲区指针。问题是,在
worker\u thread
可以处理它之前,
serverListener
已将值重置为零(
bzero(buf,BUFSIZE)
)!并且考虑到
工作线程
只能在大小大于4时写入文件,因此它不会写入该文件。 所以为了解决我的问题,我更换了线路:

pthread_create(&id_pool[i], NULL, worker_thread, (void*)buf);
作者:

它成功了!!
仍然没有真正解释为什么它可以在调试模式下创建文件…

您是否看到“Worker[%d]busy\n”在你的stdout中?是的!发送到stdout的所有消息都打印得很好。你如何调用
worker\u thread
?你的问题缺少很多可能说明问题所在的代码。你是否阅读了编译器警告…?我没有任何编译警告
pthread_create(&id_pool[i], NULL, worker_thread, (void*)buf);
char *msg2send = strdup(buf);
pthread_create(&id_pool[i], NULL, worker_thread, (void*)msg2send);