首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

pthread_join无限期挂起__lll_lock_wait_private()

pthread_join是一个函数,用于等待指定的线程终止并回收其资源。它的原型如下:

代码语言:txt
复制
int pthread_join(pthread_t thread, void **retval);

其中,thread是要等待的线程的标识符,retval是一个指向指针的指针,用于获取被等待线程的返回值。

在调用pthread_join函数时,如果被等待的线程已经终止,那么pthread_join会立即返回,并将被等待线程的返回值存储在retval指向的位置。如果被等待的线程尚未终止,那么调用pthread_join的线程将被挂起,直到被等待的线程终止为止。

__lll_lock_wait_private()是一个内部函数,用于实现线程的互斥锁等待。它是Linux系统中的一个底层函数,用于等待互斥锁的释放。

综上所述,pthread_join无限期挂起__lll_lock_wait_private()的意思是,调用pthread_join函数时,如果被等待的线程尚未终止,调用线程将被挂起,并在内部使用__lll_lock_wait_private()函数等待互斥锁的释放。

关于pthread_join的更多信息,可以参考腾讯云的文档:pthread_join函数介绍

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

process node 无限期挂起(2)

上个月公众号文章中提到《process node 无限期挂起》的问题,并在vpp-dev邮件中指出问题出现在对timing_wheel时间轮函数库的使用上,并在邮件中附上了自己的修改patch。...timer expirations */ rtb_event_loop_run_once (); ##在process node 处理流程中强制挂起...event type 0x%wx", event_type); ASSERT (0); } } 作者在process node处理流程中强制挂起当前...return t; } 从上面的分析来看,作者通过vlib_process_suspend函数强制挂起当前process节点并加入了时间轮,等待超时再次唤醒。这样此节点又能被重新调度了。...所以你可以有一系列这样的事件: 1.进程节点 A 的定时器停止(它的 stop_timer_handle 仍然指那个定时器) 2.进程节点 B 被分派并挂起,同时添加一个新的计时器。

33710
  • 【Pthreads学习笔记】基本使用

    下面是 pthread_join的函数原型: int pthread_join( pthread_t thread, void ** retval ); 参数说明...当事件或者条件发生之后, 另一个线程可以通过信号来唤起挂起的线程...., 就在其刚要挂起的时候(还没挂起), 线程2执行了唤醒线程1的代码(修改flag的值, 唤醒线程1), 假设线程2执行完上述操作之后, 线程1仍然还没有挂起, 所以 pthread_cond_signal...此后线程1终于进入了挂起状态, 等待线程2的唤醒, 而线程2则认为它已经唤醒了线程1, 让其往下执行了. 此时问题就来了, 如果线程2不再执行唤醒线程1的操作, 那么线程1就会永远处于挂起状态....线程1就会永远处于挂起状态, 线程2就会永远处于请求互斥锁的状态.

    67020

    Linux线程互斥学习笔记--详细分析

    死锁   (1)死锁的两种情况:   情况1:     如果两个线程先后调用两次lock,第二次调用lock时,由于锁已被占用,该线程会挂起等待别的线程释放锁,然后锁正是被自己占用着的,该线程又被挂起不能释放锁...,因此就永远处于挂起等待状态了,这就叫死锁。   ...A获得锁1,B获得锁2,此时A调用lock企图获得锁2,结果是需要挂起等待B释放锁2,而此时B也调用了lock企图获得锁1,结果是B挂起等待A释放锁1,于是乎A、B永远处于挂起状态。   ...  int* p3 = (int*)malloc(sizeof(int));   *p3 = 3;   pthread_create(&r3, NULL, route_read, p3);   pthread_join...(w1, NULL);   pthread_join(r1, NULL);   pthread_join(r2, NULL);   pthread_join(r3, NULL);   pthread_rwlock_destroy

    81620

    Linux线程互斥是如何实现的

    死锁   (1)死锁的两种情况:   情况1:   如果两个线程先后调用两次lock,第二次调用lock时,由于锁已被占用,该线程会挂起等待别的线程释放锁,然后锁正是被自己占用着的,该线程又被挂起不能释放锁...,因此就永远处于挂起等待状态了,这就叫死锁。   ...A获得锁1,B获得锁2,此时A调用lock企图获得锁2,结果是需要挂起等待B释放锁2,而此时B也调用了lock企图获得锁1,结果是B挂起等待A释放锁1,于是乎A、B永远处于挂起状态。   ...);   int* p3 = (int*)malloc(sizeof(int));   *p3 = 3;   pthread_create(&r3, NULL, route_read, p3);   pthread_join...(w1, NULL);   pthread_join(r1, NULL);   pthread_join(r2, NULL);   pthread_join(r3, NULL);   pthread_rwlock_destroy

    1.5K50

    Linux线程互斥学习笔记--详细分析

    死锁   (1)死锁的两种情况:   情况1:     如果两个线程先后调用两次lock,第二次调用lock时,由于锁已被占用,该线程会挂起等待别的线程释放锁,然后锁正是被自己占用着的,该线程又被挂起不能释放锁...,因此就永远处于挂起等待状态了,这就叫死锁。   ...A获得锁1,B获得锁2,此时A调用lock企图获得锁2,结果是需要挂起等待B释放锁2,而此时B也调用了lock企图获得锁1,结果是B挂起等待A释放锁1,于是乎A、B永远处于挂起状态。   ...);   int* p3 = (int*)malloc(sizeof(int));   *p3 = 3;   pthread_create(&r3, NULL, route_read, p3);   pthread_join...(w1, NULL);   pthread_join(r1, NULL);   pthread_join(r2, NULL);   pthread_join(r3, NULL);   pthread_rwlock_destroy

    62830

    详解Linux多线程中互斥锁、读写锁、自旋锁、条件变量、信号量

    那么其他线程在同一时间不会成功锁定这个互斥锁 唯一性:如果一个线程锁定了一个互斥锁,在它解除锁之前,其他线程不可以锁定这个互斥锁 非忙等待:如果一个线程已经锁定了一个互斥锁,第二个线程又试图去锁定这个互斥锁,则第二个线程将被挂起且不占用任何...(tid1, NULL); pthread_join(tid2, NULL); /* 销毁互斥锁 */ pthread_mutex_destroy(&mutex);...(ThrId1, NULL); pthread_join(ThrId2, NULL); pthread_join(ThrId3, NULL); pthread_join...条件变量的逻辑:一个线程挂起去等待条件变量的条件成立,而另一个线程使条件成立。 基本原理 线程在改变条件状态之前先锁住互斥量。如果条件为假,线程自动阻塞,并释放等待状态改变的互斥锁。...(Thread1, NULL); pthread_join(Thread2, NULL); return 0; } 结果 虚假唤醒 当线程从等待已发出信号的条件变量中醒来

    3.5K20

    Linux内核编程--进程控制,线程控制,锁机制

    2.挂起进程--wait/waitpid/waitid #include pid_t wait(int *statloc); pid_t waitpid(pid_t pid,...父进程调用wait/waitpid后会被挂起,直到子进程终止运行并将退出状态返回给父进程。 父进程也可以通过wait/waitpid来检验子进程是否已经运行结束。...否则,返回错误编号 类似于wait/waitpid将进程挂起,以等待它的子进程结束。线程场景中可以使用pthread_join将一个线程挂起以等待另一个线程结束并获得它的退出状态。...只有线程未分离时(pthread_detach),才可以使用pthread_join从另一个线程获得线程id和返回值。...该函数会将线程从主线程的分支中分离出去,当线程结束后,它的退出状态不由其它线程通过pthread_join获取,而是由该线程主动释放。

    1.2K20

    linux多线程pthread

    线程中还有一个常用函数:pthread_join函数可以用于将当前线程挂起,等待其他线程结束。实际上,这个函数是就是一个线程阻塞函数,调用它的函数将一直等待到被等待的线程结束为止。...函数 所需文件头: #include 函数原型: Void pthread_exit(void *retval) 函数传入值: retval:调用者线程的返回值,可由其他函数如pthread_join...pthread_join函数 所需文件头: #include 函数原型: int pthread_join ((pthread_t th,void **thread_return...获取线程自身的id pthread_t pthread_self(void); 等待给定线程终止 int pthread_join( pthread_t tid, void **status); statues...linux thread与fork的对比 进程原语 线程原语 描述 fork pthread_create 创建新的控制流 exit pthread_exit 从现有的控制流退出 waitpid pthread_join

    5K20
    领券