LINUX多线程求解,列题是华清远见上面的,代码如下,利用线程互斥锁实现线程的同步

LINUX多线程求解,列题是华清远见上面的,代码如下,利用线程互斥锁实现线程的同步,第1张

目测是线程退出时没有解开互斥锁,导致其它线程一直在等互斥锁被解开。

以下是修改后的thrd_func函数代码:

//线程函数入口

void *thrd_func(void *arg)

{

    int thrd_num = (int)arg

    int delay_time = 0

    int count = 0

    int res

    res = pthread_mutex_lock(&mutex)//互斥锁上锁

    if(res)

    {

        printf("Thread %d lock failed\n",thrd_num)

        pthread_exit(NULL)

    }

    printf("Thread %d is starting\n",thrd_num)

    for(count = 0count < REPEAT_NUMBERcount++)

    {

        delay_time = (int)(rand()%5)//随机时间数

        sleep(delay_time)

        printf("\tThread %d: job %d delay =%d\n",thrd_num,count,delay_time)

    }

    

    pthread_mutex_unlock(&mutex) // 解开互斥锁

    

    printf("Thread %d finished\n",thrd_num)

    pthread_exit(NULL)

}

BAC的顺序,只是启动下一个线程前,需要等待另一个线程的结果返回,你可以配合接口,来回调,

例如:

class Main implement BListener{

public void startTask(){

启动B线程,并传入listener实例,来回调用

}

//override

public void BTaskComplete(){

B线程成功执行

启动A线程

}

}

class B extends Thread{

可以构造时获取Listener实例

public void run(){

...

执行完毕出结果,Listener.BTaskComplete()

}

}


欢迎分享,转载请注明来源:内存溢出

原文地址: https://www.outofmemory.cn/yw/8564979.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-18
下一篇 2023-04-18

发表评论

登录后才能评论

评论列表(0条)

保存