精华内容
下载资源
问答
  • Ubuntu pthread使用指北

    2019-04-29 21:10:21
    pthread_create() #include <pthread.h> int pthread_create(pthread_t *restrict thread, const pthread_attr_t *restrict attr, void *(*start_routine)(void*), void *restrict arg); (1)线程一建立就...
    1. pthread_create()
      #include <pthread.h>
      int pthread_create(pthread_t *restrict thread, const pthread_attr_t *restrict attr, void *(*start_routine)(void*), void *restrict arg);
      (1)线程一建立就执行start_routine()。start_routine返回时,就好像隐式调用了pthread_exit()。
      (2)新创建的线程的signal状态:
        (a) 信号掩码会从创建此线程的线程处继承;
        (b) The set of signals pending for the new thread shall be empty. (the set of signals that are pending for delivery to the calling thread (i.e., the signals which have been raised while blocked))
      (3)线程一建立就执行start_routine()。如果想模拟分离“创建线程”和“执行线程”,可以在start_routine()内等待条件变量。
      (4)线程终止方式:
        ① 调用pthread_exit()
        ② 从start_routine()返回
        ③ 被取消(pthread_cancel())
        ④ 有一个线程调用了exit()或者main线程return,则所有线程终止。
      (5) 在C++程序中使用pthread_create时,其中的函数参数必须指向一个静态函数。
      (6)成功返回0

    2. pthread_exit()
      #include <pthread.h>
      void pthread_exit(void *retval);
      (1)当一个线程终止时,进程共享资源(如mutexes, condition variables, semaphores, and file descriptors)没有被释放
      (2)start_routine()中,return (void*)retval;等效于最后调用pthread_exit((void*)retval)
      (3)执行后不会返回到调用者,且永远不会失败。

    3. pthread_join()
      #include <pthread.h>
      int pthread_join(pthread_t thread, void **value_ptr);
      (1)调用线程阻塞地等待指定线程终止
      (2)可以通过value_ptr参数带出指定线程执行后的结果
      (3)成功返回0

    4. 线程安全函数
      什么是线程安全函数:可以安全地同时从多个线程中调用的函数。
      线程不安全的函数列表见pthreads(7) manpage

    5. 线程与资源释放
      (1)线程为detached状态,当线程终止时,资源自动释放
      (2)线程为joinable状态,只有其他线程调用pthread_join()返回后,线程资源才被释放

    6. 线程与信号
      (1)进程中的线程共享该进程的所有信号
      (2)共享信号处理函数。也就是说,当我们在一个线程中设置了某个信号的信号处理函数后,它将覆盖其他线程为同一个信号设置的信号处理函数
      因此,应该定义一个专门的线程来处理所有的信号,步骤如下:
      (1)主线程创建出其他子线程之前调用pthread_sigmask()设置信号掩码,所有子线程继承此掩码。所有线程不会响应被屏蔽的信号。
      (2) 在某个线程中调用sigwait(),相当于信号处理函数,它可以阻塞等待被屏蔽的信号并处理。
      处理的代码例子:

    int main()
    {
    	// ...
    	pthread_t thread;
    	sigset_t set;
    
    	/* Block SIGQUIT and SIGUSR1; other threads created by main()
                  will inherit a copy of the signal mask. */
        sigemptyset(&set);
        sigaddset(&set, SIGQUIT);
        sigaddset(&set, SIGUSR1);
        pthread_sigmask(SIG_BLOCK, &set, NULL);
        
        pthread_create(&thread, NULL, &sig_thread, (void *) &set);
    	// ...
    }
    
    static void* sig_thread(void *arg)
    {
    	sigset_t *set = arg;
    	int s, sig;
    	for (;;) {
    		/* 阻塞等待信号集中的一个信号发生 */
    		s = sigwait(set, &sig);
    		if (s != 0)
                 handle_error_en(s, "sigwait");
             printf("Signal handling thread got signal %d\n", sig);
            /* 接下来就可以处理相应的信号 */
         }
    }
    
    展开全文
  • ubuntu如何安装pthread

    万次阅读 2019-03-16 17:01:48
    由于学习多线程编程,所以用到pthread,但是man的时候却发现没有pthread函数库的手册页,然后安装 $sudoapt-getinstall glibc-doc 安装以后,发现还是有很多函数不全,只有一小部分pthread的函数,使用man -k ...

    由于学习多线程编程,所以用到pthread,但是man的时候却发现没有pthread函数库的手册页,然后安装
    $sudo apt-get install glibc-doc
    安装以后,发现还是有很多函数不全,只有一小部分pthread的函数,使用man -k pthread或apropos pthread可以查找到当前manpages中关于pthread的手册。安装manpages-posix-dev就可以了
    $sudo apt-get install manpages-posix manpages-posix-dev
    完成!

     

    原文链接:https://zhidao.baidu.com/question/124078403.html

    展开全文
  • https://stackoverflow.com/questions/58848694/gcc-whole-archive-recipe-for-static-linking-to-pthread-stopped-working-in-rec vscode task.json 设置: "args": [ "-g", "${file}", "-std=c++17", "-Wall",...

    参考链接:
    https://stackoverflow.com/questions/58848694/gcc-whole-archive-recipe-for-static-linking-to-pthread-stopped-working-in-rec

    vscode task.json 设置:

    "args": [
      "-g",
      "${file}",
      "-std=c++17",
      "-Wall",
      "-static",
      "-Wl,--whole-archive",
      "-lrt",
      "-lpthread",
      "-Wl,--no-whole-archive",
      "-o",
      "${fileDirname}/a.out"
    ],
    

    注意-Wl后边逗号前后没有空格。

    展开全文
  • 按照如下指令gcc编译时候出现如下错误 ...daima.c:(.text+0x175):对‘pthread_create’未定义的引用 daima.c:(.text+0x190):对‘pthread_create’未定义的引用 daima.c:(.text+0x1a1):对‘pthread_join’未定...

    按照如下指令gcc编译时候出现如下错误

    $ gcc daima.c -o out
    /tmp/ccv054QI.o:在函数‘main’中:
    daima.c:(.text+0x175):对‘pthread_create’未定义的引用
    daima.c:(.text+0x190):对‘pthread_create’未定义的引用
    daima.c:(.text+0x1a1):对‘pthread_join’未定义的引用
    daima.c:(.text+0x1b2):对‘pthread_join’未定义的引用
    
    

    原因是pthread不是linux系统的默认库,因此需要在编译时候加入-l pthread
    如下:

    在这里插入图片描述

    展开全文
  • pthread.h> 2.添加编译时链接库:target_link_libraries(server_concurrent pthread) --->cmake方式,其中server_concurrent为生成目标 pthread为线程库 3.在代码中使用线程函数 pthread_t tid; //线程ID ...
  • Ubuntu —— 库安装 :: pthread

    千次阅读 2020-01-02 09:03:54
    多线程编程用到pthread: 安装 sudo apt-get install glibc-doc 安装以后,发现还是有很多函数不全,只有一小部分pthread的函数,安装manpages-posix-dev就可以了。 sudo apt-get install manpages-posix-...
  • gcc client.c -o client gcc client.c -o client -pthread
  • pthread on ubuntu 12.04

    千次阅读 2013-03-22 21:08:07
    libcore / luni / src / main / native / AsynchronousSocketCloseMonitor.cpp:64: undefined reference to "pthread_kill" out/debug/host/linux-x86/pr/sim/obj/STATIC_LIBRARIES/libjavacore_intermediates/libj
  • ubuntu 下没有pthread库 怎么办?

    万次阅读 2016-12-20 19:13:02
    ubuntu 下默认是没有pthread库 的 即使在编译的时候 加上 -lpthread 也不行 man不到相关函数  使用下面的指令安装 就可以了 sudo apt-get install glibc-doc sudo apt-get install manpages-posix-dev 然后...
  • Ubuntu16.04使用gcc编译程序失败,主体错误信息为“undefined reference to `pthread_create”: 解决方法 (1)检查源码,在调用pthread_create函数,是否引用了头文件 #include<pthread.h>,若没有,则...
  • 本文介绍了在Ubuntu下编译文件时遇到undefined reference to 'pthread_create问题的解决方法。给出了gcc编译时用-lpthread 和eclipse编译时添加共享库来解决该问题的方法。
  • 由于近期要解决多线程访问同一内存,造成不当竞争...pthread.h> #include<stdio.h> #include<stdlib.h> #include<string.h> #include<unistd.h> using namespace std; int ticket_sum=20;
  • ubuntu系统中无法man到 pthread_mutex_lock/pthread_mutex_trylock/pthread_mutex_unlock等函数 liujing@ubuntu:~/projects/test$ man pthread_mutex_lock 没有 pthread_mutex_lock 的手册页条目 解决 $sudo apt-...
  • ubuntupthread

    2019-09-29 09:14:30
    由于学习多线程编程,所以用到pthread,但是man的时候却发现没有pthread函数库的手册页,然后安装 $sudo apt-get install glibc-doc 安装以后,发现还是有很多函数不全,只有一小部分pthread的函数,使用man -k ...
  • VS Code在ubuntu中执行多线程程序时报错: 问题描述: 最近在学习C++并发多线程,在ubuntu中使用VS Code编写多线程代码后,Ctrl+F5运行程序,结果出现了以下的问题: #include<iostream> #include<vector&...
  • 因为pthread不是linux下的默认的库,也就是在链接的时候,无法找到phread库中哥函数的入口地址,于是链接会失败 所以我们需要链接到相应的库 gcc main.c -o test -lpthread 这样子编译就不报错能够正常运行了 ...
  • ubuntupthread_mutex_init man中查不到 问题: 如题所述,包括pthread_mutex_init 和 pthread_mutex_lock 这些函数都找不到 解决办法: 安装manpages:manpages-posix-dev Mint/Ubuntu:sudo apt-get install ...
  • 使用下面的命令就可以了! sudo apt-get install glibc-doc sudo apt-get install manpages-posix-...(注意线程号pthread_t 的类型为typedef unsigned long int pthread_t, 所以不能直接进行比较 pthread_tid = ...
  • undefined reference to `pthread_create'欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格...
  • VScode在Ubuntu中执行多线程程序时,您的环境中可能会出现类似下面的报错提示: in function `main': hw2_2.cpp:(.text+0x4d): undefined reference to `pthread_create' /usr/bin/ld: hw2_2.cpp:(.text+0x5e): ...
  • 原因:因为man手册中默认没有安装 关于posix标准的文档。 解决办法:Ubuntu:sudo apt-get install manpages-posix-dev 静等安装,然后就可以了。
  • 问题:Ubuntu 14.04.5 LTS 环境无pthread_mutex_*** 系列函数的man手册解决方案:sudo apt-get install glibc-docsudo apt-get install manpages-posix-dev
  • pthread.h> #include "MQTTClient_ACU.h" #include "LS1043_client.h" #define NUM_THREADS 2 char tmp_buf[50][13];//定义变量 int main(int argc, char* argv[]) { pthread_t threads[NU...
  • 这是因为phtread这个库没有加到默认的编译选项里面,所以可以通过手动编译 gcc test.c -o test -lpthread 然后./test 在eclipse中可以通过添加library来解决问题。...点击添加输入pthread确定即可。别忘了引入pthrea
  • ubuntu pthread 相关manpage

    2017-06-27 16:37:37
    apt 两个 glibc-doc 和manpages-posix-dev。我们猜一猜是不是装完posix的所有manpage都有啦
  • 终端下输入man pthread_creat,报错无pthread_creat的手册页条目 解决办法: sudo apt-get install glibc-doc sudo apt-get install manpages-posix-dev

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 8,368
精华内容 3,347
关键字:

pthreadubuntu