编写多线程的时候,最好不要再用fork函数,下面是一个多线程使用fork后的例子

#include <stdio.h>
#include <time.h>
#include <pthread.h>
#include <unistd.h>
pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
void* doit(void* arg)
{
    printf("pid = %d begin doit ...\n", static_cast<int>(getpid()));
    pthread_mutex_lock(&mutex);
    struct timespec ts = { 2, 0 };
    nanosleep(&ts, NULL);
    pthread_mutex_unlock(&mutex);
    printf("pid = %d end doit ...\n", static_cast<int>(getpid()));

    return NULL;
}
int main(void)
{
    printf("pid = %d Entering main ...\n", static_cast<int>(getpid()));
    pthread_t tid;
    pthread_create(&tid, NULL, doit, NULL);
    struct timespec ts = { 1, 0 };
    nanosleep(&ts, NULL);
    if (fork() == 0)//fork之后,子进程从下面开始执行
    {
        doit(NULL);//父进程执行到这一句的时候会暂停一会,等父进程中的线程对mutex解锁后执行这一句
                   //但是子进程执行到这一句的时候,就会一直等待,因为子进程中没有线程对mutex解锁
    }
    pthread_join(tid, NULL);
    printf("pid = %d Exiting main ...\n", static_cast<int>(getpid()));
    return 0;
}

 

上一篇:ch3进程学习笔记


下一篇:V/SV 时延控制