标签: pthreads

如何确定分离的pthread是否还活着?

如何确定分离的pthread是否还活着

我有一个与线程的通信通道(从线程向外指向的单向队列)但是如果线程没有喘息的情况下死亡会发生什么?

我应该让自己使用过程信号,还是可以以某种方式探测线程的活力?

linux pthreads

24
推荐指数
3
解决办法
3万
查看次数

什么是_REENTRANT标志?

编译多线程程序我们使用gcc如下:

gcc -lpthread -D_REENTRANT -o someprogram someprogram.c
Run Code Online (Sandbox Code Playgroud)

国旗到底在-D_REENTRANT做什么?

c c++ multithreading pthreads

24
推荐指数
4
解决办法
1万
查看次数

如何从循环外部杀死无限循环中的pthread?

我创建了一个线程,并将其置于无限循环中.使用valgrind检查代码时出现内存泄漏.这是我的代码:

#include <pthread.h>
#include <time.h>

void thread_do(void){
    while(1){}
}

int main(){
    pthread_t th;   
    pthread_create(&th, NULL, (void *)thread_do, NULL);

    sleep(2);
    /* I want to kill thread here */
    sleep(2);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

所以在main中创建一个线程,并且一直运行thread_do().有没有办法在2秒后从内部杀死它?我试过了两次pthread_detach(th),pthread_cancel(th)但我仍然有泄漏.

c memory-leaks pthreads threadpool

24
推荐指数
2
解决办法
3万
查看次数

使用cmake构建错误:找不到-lpthreads

我有一个在给定机器上顺利运行的c ++项目,现在我正在尝试使用相同的操作系统(Xubuntu 14.04)在另一个上编译它.

我已经安装了所有的依赖项,我使用cmake来构建项目,尽管它因以下错误而停止:

确定pthreads中是否存在函数pthread_create失败,输出如下:.../usr/bin/ld:找不到-lpthreads

包含编译器标志的cmakelists.txt行如下:

set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -O3 -lpthread -DNDEBUG -DEIGEN_MPL2_ONLY")
set(CMAKE_C_FLAGS_DEBUG "-g -O0 -Wall -lpthread -DEIGEN_MPL2_ONLY")
set(CMAKE_CXX_FLAGS "${CMAKE_C_FLAGS} -O3 -lpthread -I/usr/include/freetype2 -DNDEBUG -DEIGEN_MPL2_ONLY")
set(CMAKE_CXX_FLAGS_DEBUG "-g -O0 -Wall -lpthread -I/usr/include/freetype2 -DEIGEN_MPL2_ONLY")
Run Code Online (Sandbox Code Playgroud)

我做了一些研究,已经尝试过以下方法:

-used -pthread/-threads/-thread/-lpthreads而不是-lpthread,它不能解决问题并使构建停止而不会找到以下包: find_package (Threads)

  • 在上面的cmakelists行中更改了-lpthread的顺序,这会产生相同的错误
  • 使用了不同的版本o gcc/g ++:试过4.4,4.6和4.8,没有任何改变
  • 在/ usr/lib /中创建了一个指向libpthread.so的符号链接,没有任何更改

我会很感激一些帮助,因为我已经很想知道下一步该尝试什么.

编辑1

图书馆应该在哪里:

$ find /lib -name "*pthread*"
/lib/x86_64-linux-gnu/libpthread-2.19.so
/lib/x86_64-linux-gnu/libpthread.so.0
Run Code Online (Sandbox Code Playgroud)

还发现了pthread_create:

$ nm /lib/x86_64-linux-gnu/libpthread.so.0 | grep "pthread_create"
0000000000008430 t __pthread_create_2_1
00000000000081430 T pthread_create@@GLIBC_2.2.5
Run Code Online (Sandbox Code Playgroud)

我还验证了libpthread-stubs0libc6-dev都存在.

编辑2

这是FindThreads.cmake文件内容的一部分,位于/usr/share/cmake-2.8/Modules/中:

if(CMAKE_HAVE_SPROC_H AND NOT CMAKE_THREAD_PREFER_PTHREAD) …
Run Code Online (Sandbox Code Playgroud)

c++ linux pthreads cmake

24
推荐指数
2
解决办法
5万
查看次数

当g ++静态链接pthread时,导致分段错误,为什么?

#include <iostream>
#include <map>
#include <thread>

#define SIZE 1024
#define AMOUNT 100000
#define THREADS 4

class A
{
private:
    char a[SIZE];
};

void test()
{
    std::cout << "test start\n";
    std::map<int, A*> container;
    for(int i=0; i<AMOUNT; i++)
    {
        A* a = new A();
        std::pair<int, A*>p = std::make_pair(i, a);
        container.insert(p);
    }

    std::cout << "test release\n";
    for(int i=0; i<AMOUNT; i++)
    {
        auto iter = container.find(i);
        delete iter->second;
        container.erase(iter);
    }
    std::cout << "test end\n";
}

int main()
{
    std::thread ts[THREADS];
    for(int i=0; i<THREADS; i++) …
Run Code Online (Sandbox Code Playgroud)

c++ gcc boost pthreads c++11

24
推荐指数
1
解决办法
7696
查看次数

如何衡量互斥争用?

我有一些在Linux上使用PThreads的线程代码,我怀疑它正遭受过多的锁争用.有哪些工具可供我测量?

Solaris有DTrace和plockstat.Linux上有类似的东西吗?(我知道Linux最近的DTrace端口,但它似乎还没有为黄金时间做好准备.)

c linux pthreads dtrace

23
推荐指数
3
解决办法
1万
查看次数

PThread vs boost :: thread?

过去没有线程经验,C++中的线程技术对于初学者来说是最简单的吗?boost :: thread还是pthreads?

c++ multithreading boost posix pthreads

23
推荐指数
4
解决办法
2万
查看次数

pthread启动函数中的return()与pthread_exit()

以下程序显示我们可以使用return()或pthread_exit()返回可用于pthread_join()的状态变量的void*变量.

(1)是否应优先使用一个而不是另一个?

(2)为什么使用return()有效?通常我们会想到返回将值放在堆栈上但是由于线程已经完成,堆栈应该消失.或者堆栈是否在pthread_join()之后才被销毁?

(3)在你的工作中,你是否看到很多地方变量的使用?我看到90%的代码看起来只是NULL状态参数.因为通过void*ptr改变的任何东西已经反映在调用线程中,所以返回它似乎没什么意义.返回的任何新的void*ptr都必须指向由开始线程进行malloc化的东西,这使得接收线程有责任处理它.我认为状态变量是无意义的,我错了吗?

#include <iostream>
#include <pthread.h>

using namespace std;

struct taskdata
{
       int  x;
     float  y;
    string  z;
};


void* task1(void *data)
{
    taskdata *t = (taskdata *) data;

    t->x += 25;
    t->y -= 4.5;
    t->z = "Goodbye";

    return(data);
}

void* task2(void *data)
{
    taskdata *t = (taskdata *) data;

    t->x -= 25;
    t->y += 4.5;
    t->z = "World";

    pthread_exit(data);
}


int main(int argc, char *argv[])
{
    pthread_t threadID;

    taskdata t = {10, 10.0, "Hello"};

    void *status;

    cout …
Run Code Online (Sandbox Code Playgroud)

c++ unix linux pthreads

23
推荐指数
2
解决办法
2万
查看次数

条件变量 - 为什么在调用pthread_cond_wait()之前调用pthread_cond_signal()是一个逻辑错误?

它是在POSIX线程教程https://computing.llnl.gov/tutorials/pthreads/ 中编写的 ,这是一个逻辑错误.

我的问题是为什么它是一个逻辑错误?

在我的程序中,我需要使用这些信号,但是我不能保证会有一个处于_cond_wait状态的线程.我试图测试它,没有任何反应.这会导致意外行为还是更糟?

谢谢!

c c++ pthreads condition-variable

23
推荐指数
3
解决办法
2万
查看次数

Php:何时使用pthread

我对使用线程知之甚少,但我查看了php的pthreads,它看起来非常有趣,容易,或者比我想象的更容易......

我搜索了一些示例并查看了文档,但是我找不到任何真实世界的例子,说明何时使用线程实际上是有益的,它确实适用于不依赖于彼此的长任务,例如执行许多http请求或也许发送邮件.

但是写日志条目怎么样?插入数据库?(比如跟踪用户活动)从数据库中获取(我可以从线程返回数据吗?)

这会增加性能还是过多地创建线程的开销?(虽然我可以使用工作池也可以减少开销,我认为...)

任何建议或例子都非常感谢!

php multithreading pthreads die

23
推荐指数
1
解决办法
2万
查看次数