c-尽管pthread_create()返回成功,但没有创建线程



我在HP-UX甚至SUSE上写了很多线程代码,这些代码运行得很好。但它在Red Hat上不起作用。这是我的机器:

Linux版本3.10.0-1062.18.el7.x86_64(Red Hat 4.8.5-39(

Red_Hat_Enterprise_Linux-Relase_Notes-7-en-US-7-2.el7.noarch

redhat-release-server-7.7-10.el7.x86_64

我写了一个简单的测试程序thr_ex.c:

#include <pthread.h>
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>

void *funny(void *);

void *funny(s)
void *s;
{ 
int fd;

fd = creat("/tmp/funny_func", 0600);
write(fd, s, strlen((char *) s));
close(fd);
}

int main()
{
int                 return_value;
pthread_t           thread_id;
pthread_attr_t      thread_attr;

pthread_attr_init(&thread_attr);
pthread_attr_setscope(&thread_attr, PTHREAD_SCOPE_SYSTEM);
pthread_attr_setdetachstate(&thread_attr, PTHREAD_CREATE_DETACHED);
return_value = pthread_create(&thread_id, &thread_attr, funny, (void *) "Here I amn");
printf("Return value == %dn", return_value);
printf("Thread id    == %hun", thread_id);
exit(0);
} /* End main. */

编译、构建:

gcc-phread-s-o thr_ex thr_ex.c

运行:

/thr_ex

返回值==0

线程id==5888

但是在/tmp下不会创建任何文件。strace-f没有显示creat((或write(((除了main((中的printf(。

然而,strace-f确实显示,例如:strace:未知pid 64574的退出已忽略

我尝试过更简单的代码,其中线程只运行printf((和fflush((,没有线程属性,也没有函数的参数。还是什么也没发生。

在主中的return语句或exit(0(语句之前插入

pthread_exit( NULL );

否则,创建的线程可能没有时间执行,因为进程将结束。

相关内容

  • 没有找到相关文章

最新更新