关于线程阻塞 求教

发布于 2022-09-30 18:57:59 字数 2480 浏览 16 评论 0

关于线程阻塞问题,一个用户态线程如果被阻塞,那么整个进程都会阻塞,我在APUE中也看到是这样讲解的 谁能举个例子??

这个是我的测试代码

#define MAX_THREAD (3)

unsigned long long main_counter;
unsigned long long counter[MAX_THREAD] = {0};

void *thread_worker(void *i)
{
        int thread_num = *((int *)i);
        printf("my thread_num = %d\n", thread_num);
        while(1){
                counter[thread_num]++;
                main_counter++;
                sleep(1);
        }
}

int main(int argc, char ** argv)
{
        int         i;
        int         rtn;
        char        ch;
        pthread_t        pthread_id[MAX_THREAD] = {0};
        for( i = 0; i < MAX_THREAD; i++){
                if ( -1 == pthread_create(pthread_id + i, 0, thread_worker, (void *)(&i))){
                        printf("pthread_create error\n");
                }
        }
        do{
                unsigned long long sum = 0;
                for( i = 0; i < MAX_THREAD; i++){
                        sum += counter[i];
                        printf("%llu\n", counter[i]);
                }
                printf("%llu, %llu\n", main_counter, sum);
        }while((ch = getchar())!= 'q');
        return 0;
}

在main函数中的while 会产生阻塞, 但是线程thread_worker还在运行 因为每次随意按下一个不是q的键时打印的值不同 这怎么解释??
有不妥的地方请大家指教  谢谢!!!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(6

骄兵必败 2022-10-07 18:57:59

不会的,要是阻塞了那多线程还有什么意义呢?

街角迷惘 2022-10-07 18:57:59

线程和进程的区别就是能够独立运行,因此任何一个线程的阻塞都不会也不应该引起别的线程的长期阻塞。
很有可能是资源竞争时导致死锁了,比如mutex一直lock住不释放。

余生一个溪 2022-10-07 18:57:59

回复 1# losemyheaven

     看看用户态和内核态线程的区别

寄意 2022-10-07 18:57:59

本帖最后由 scienceworld 于 2011-04-01 11:54 编辑

1、如果你的进程不是单线程的,那么其中一个线程阻塞并不会阻塞整个进程。
2、LinuxThreads是用户空间的线程库,所采用的是线程-进程1对1模型(即一个用户线程对应一个轻量级进程,而一个轻量级进程对应一个特定的内核线程),所以用户线程阻塞也就意味着这个对应的内核轻量级进程的阻塞。

未央 2022-10-07 18:57:59

线程是并发运行的,由内核进行调度,除非是单线程,否则单一线程阻塞是不会导致整个进程阻塞。内核会调度的。

萌酱 2022-10-07 18:57:59

lock 函数

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文