【问题标题】:Pthread_t not startingPthread_t 未启动
【发布时间】:2016-05-11 16:46:45
【问题描述】:

我写这个简短的例子是为了理解 C 中的线程编程。它应该写“线程 0”。但是没有输出。 这是代码。

#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>

int i=0;
pthread_mutex_t mutex;

void * fonction(){
    pthread_mutex_lock(&mutex);
    printf("thread %d \n",i++);
    pthread_mutex_unlock(&mutex);
    pthread_exit(NULL);
}

int main(){
    pthread_t a;
    pthread_mutex_init(&mutex,NULL);
    pthread_create(&a,NULL,fonction,NULL);
    return EXIT_SUCCESS;
}

有人可以帮助我吗? ps:我是用这个编译的

gcc -pthread test.c -o test

【问题讨论】:

  • 查找pthread_join

标签: c multithreading pthreads


【解决方案1】:

pthread_create()之后和return EXIT_SUCCESS;之前插入pthread_join(a, NULL),以确保子线程在main()返回之前完成。

【讨论】:

  • 谢谢我已将它添加到我的程序中,现在它正在工作。我必须放入 pthread_join 以避免同步问题吗?
【解决方案2】:

pthread_join() 是一种方法,但它不是唯一的解决方案。

如果您的主线程不需要(不需要)存活更长时间(比它创建的线程),它可以简单地使用pthread_exit(0) 退出。

当主线程使用pthread_exit() 退出时,进程会一直保持活动状态,直到进程中的最后一个线程退出。

当主线程进行初始化/设置并启动多个线程然后不再需要它时,这很有用。 否则,它必须等待 所有 线程完成(请记住,当 main() 退出时,整个进程都会退出 - 调用 pthread_exit() 将仅退出主 线程,而不是整个过程)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-12-18
    • 1970-01-01
    • 2011-01-12
    • 1970-01-01
    • 1970-01-01
    • 2015-12-22
    • 2011-01-28
    相关资源
    最近更新 更多