• 父进程有多个线程,fork()只会复制一个线程


    fork()前的父进程有多个线程,子进程只复制fork所在线程为主进程,其他线程不复制

    #include <pthread.h>
    #include <sys/prctl.h>
    
    pthread_mutex_t my_lock = PTHREAD_MUTEX_INITIALIZER;
    
    static void *my_thread1(void *args)
    {
        prctl(PR_SET_NAME, "thread_1");
        sleep(3*60);
    
        return NULL;
    }
    
    static void *my_thread2(void *args)
    {
        prctl(PR_SET_NAME, "thread_2");
        sleep(3*60);
    
        return NULL;
    }
    
    int main(int argc, char * argv[])
    {
    
        int count = 0;
        int ret = 0;
        int rc= 0;
    
        pthread_t thread_fd_1;
        pthread_t thread_fd_2;
    
        prctl(PR_SET_NAME, "thread_main");
    
        rc |= pthread_create(&thread_fd_1, NULL, my_thread1, NULL);
        rc |= pthread_create(&thread_fd_2, NULL, my_thread2, NULL);
    
    
        pthread_mutex_lock(&my_lock);
        count = 0;
    
        ret = fork();
        if (0 == ret) {
            
            printf("child will lock\r\n");
            pthread_mutex_lock(&my_lock);
            printf("child lock OK\r\n");
    
            count = 1;
    
            printf("child will unlock\r\n");
            pthread_mutex_unlock(&my_lock);
            printf("child unlock OK\r\n");
    sleep(3*60);
    
        } else {
            printf("father will sleep(3*60)\r\n");
    sleep(3*60);
        }
    
        return 0;
    }

     

    #include <pthread.h>
    #include <sys/prctl.h>
    
    pthread_mutex_t my_lock = PTHREAD_MUTEX_INITIALIZER;
    static int count = 0;
    
    static void *my_thread1(void *args)
    {
        prctl(PR_SET_NAME, "thread_1");
        sleep(3*60);
    
        return NULL;
    }
    
    static void *my_thread2(void *args)
    {
        int ret = 0;
    
        prctl(PR_SET_NAME, "thread_2");
        
        ret = fork();
        if (0 == ret) {
            
            printf("child will lock\r\n");
            pthread_mutex_lock(&my_lock);
            printf("child lock OK\r\n");
    
            count = 1;
    
            printf("child will unlock\r\n");
            pthread_mutex_unlock(&my_lock);
            printf("child unlock OK\r\n");
    sleep(3*60);
    
        } else {
            printf("father will sleep(3*60)\r\n");
    sleep(3*60);
        }
        return NULL;
    }
    
    int main(int argc, char * argv[])
    {
    
        int ret = 0;
        int rc= 0;
    
        pthread_t thread_fd_1;
        pthread_t thread_fd_2;
    
        prctl(PR_SET_NAME, "thread_main");
    
        rc |= pthread_create(&thread_fd_1, NULL, my_thread1, NULL);
        rc |= pthread_create(&thread_fd_2, NULL, my_thread2, NULL);
    
    
        pthread_mutex_lock(&my_lock);
        count = 0;
    
    sleep(3*60);
    
        return 0;
    }

     

  • 相关阅读:
    [智能架构系列]PHP获取用户IP所在地的信息
    BT的QQ,从QQ2011看腾讯的变化
    值得怀念的日子
    懂运营的RD是最好的PM
    A && B
    更新redis到2.2.1版本
    [智能架构系列]什么是Buddy智能开发框架
    PHP你知道的
    No copy,No paste
    结网读书笔记从产品经理的角度看产品
  • 原文地址:https://www.cnblogs.com/LiuYanYGZ/p/16719638.html
Copyright © 2020-2023  润新知