父进程有多个线程,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; }