zoukankan      html  css  js  c++  java
  • Linux下线程pid和tid

    #include <stdio.h>
    #include <pthread.h>
    #include <sys/types.h>
    #include <sys/syscall.h>
    
    struct message
    {
        int i;
        int j;
    };
    
    void *hello(struct message *str)
    {
        printf("child, the tid=%lu, pid=%d
    ",pthread_self(),syscall(SYS_gettid));
        printf("the arg.i is %d, arg.j is %d
    ",str->i,str->j);
        printf("child, getpid()=%d
    ",getpid());
        while(1);
    }
    
    int main(int argc, char *argv[])
    {
        struct message test;
        pthread_t thread_id;
        test.i=10;
        test.j=20;
        pthread_create(&thread_id,NULL,hello,&test);
        printf("parent, the tid=%lu, pid=%d
    ",pthread_self(),syscall(SYS_gettid));
        printf("parent, getpid()=%d
    ",getpid());
        pthread_join(thread_id,NULL);
        return 0;
    }

    getpid()得到的是进程的pid,在内核中,每个线程都有自己的PID,要得到线程的PID,必须用syscall(SYS_gettid);

    pthread_self函数获取的是线程ID,线程ID在某进程中是唯一的,在不同的进程中创建的线程可能出现ID值相同的情况。

    #include <stdio.h>
    #include <pthread.h>
    #include <stdlib.h>
    #include <unistd.h>
    #include <sys/syscall.h>
    
    void *thread_one()
    {
        printf("thread_one:int %d main process, the tid=%lu,pid=%ld
    ",getpid(),pthread_self(),syscall(SYS_gettid));
    }
    
    void *thread_two()
    {
        printf("thread two:int %d main process, the tid=%lu,pid=%ld
    ",getpid(),pthread_self(),syscall(SYS_gettid));
    }
    
    int main(int argc, char *argv[])
    {
        pid_t pid;
        pthread_t tid_one,tid_two;
        if((pid=fork())==-1)
        {
            perror("fork");
            exit(EXIT_FAILURE);
        }
        else if(pid==0)
        {
            pthread_create(&tid_one,NULL,(void *)thread_one,NULL);
            pthread_join(tid_one,NULL);
        }
        else
        {
            pthread_create(&tid_two,NULL,(void *)thread_two,NULL);
            pthread_join(tid_two,NULL);
        }
        wait(NULL);
        return 0;
    }

  • 相关阅读:
    Data Flow ->> Slow Changing Dimension
    SQL Server ->> 生成Numbers辅助表
    Oracle ->> 查看分区表的每个分区的数据行分布情况
    SQL Server ->> 分区表上创建唯一分区索引
    Oracle ->> Oracle下查看实际执行计划的方法
    Oracle ->> Oracle下实现SQL Server的TOP + APPLY
    Oracle ->> 行转列, 列转行
    Oracle ->> Oracle下生成序列的方法
    linux find命令用法
    linux <<eof
  • 原文地址:https://www.cnblogs.com/lakeone/p/3789117.html
Copyright © 2011-2022 走看看