目测是线程退出时没有解开互斥锁,导致其它线程一直在等互斥锁被解开。
以下是修改后的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()
}
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)