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;
}