作者:Hoorxx鹿_416 | 来源:互联网 | 2023-09-16 03:30
#include
#include
#include
#include
#include
#include
typedef unsigned long u32;
pthread_t ntid;void printids(const char *);
void printid(const char *);
void *run(void *);
int main()
{
int err;
err = pthread_create(&ntid ,NULL,run ,NULL);
if(err != 0)
{
printf("can not create thread:%s!\n",strerror(err));
exit(1);
}
printids("main thread: ");
printid("main thread1: ");
sleep(1);
return 0;
}
void printids(const char *s)
{
pid_t pid;
pthread_t tid;
pid = getpid();
tid = pthread_self();
printf("%s pid %u tid %u(0x%x)\n",s,(u32)pid,(u32)tid,(u32)tid);
}
void printid(const char *l)
{
pid_t pid;
pthread_t tid;
pid = getpid();
tid = pthread_self();
printf("%s pid %u thid %u(0x%x)\n",l,(u32)pid,(u32)tid,(u32)tid);
}
void *run(void *arg)
{
pid_t pid;
pid =fork();
if(pid == 0)
{
printids("thread new child: ");
exit(0);
}
else
{
printids("thread new parent: ");
exit(0);
}
// printids("new thread : ");
return ((void *)0);
}
程序是自己在看书时候从书上抄下的代码,源代码主要是查看主线程的tid,pid和线程函数的tid,pid,我想由主程序直接调用的普通函数是否线程id相同,于是就添加了printid,为了查看调用的线程函数中再创建进程会是什么效果,就在run中调用了fork()。结果如下:
[rilihong@localhost c_program]$ ./thread
main thread: pid 31993 tid 3078964928(0xb78546c0)
main thread1: pid 31993 thid 3078964928(0xb78546c0)
thread new parent: pid 31993 tid 3078962032(0xb7853b70)
[rilihong@localhost c_program]$ thread new child: pid 31995 tid 3078962032(0xb7853b70)
主函数中调用的普通函数pid和tid相同,主函数中调用的线程函数与主函数的主线程pid相同但是tip不同,在线程中创建的进程pid不同,但是新进程和run线程的tid相同。