问题描述
我已经在HP-UX甚至SUSE上编写了很多线程代码,并且效果很好。但这在Red Hat上不起作用。这是我的机器:
Linux版本3.10.0-1062.18.1.el7.x86_64(Red Hat 4.8.5-39)
Red_Hat_Enterprise_Linux-Release_Notes-7-zh-CN-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 am\n");
printf("Return value == %d\n",return_value);
printf("Thread id == %hu\n",thread_id);
exit(0);
} /* End main. */
编译,构建:
gcc -pthread -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(),没有线程属性,并且函数没有参数。仍然没有任何反应。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)