标签: pthreads

Pthread互斥断言错误

我在基于linux的(arm)通信应用程序中在不可预测的时间遇到​​以下错误:

pthread_mutex_lock.c:82: __pthread_mutex_lock: Assertion `mutex->__data.__owner == 0' failed.
Run Code Online (Sandbox Code Playgroud)

谷歌出现了很多关于这个错误的引用,但很少有与我的情况相关的信息.我想知道是否有人可以给我一些关于如何解决此错误的想法.有谁知道这个断言的常见原因?

提前致谢.

linux assert mutex glibc pthreads

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

我怎么能等待任何/所有pthreads完成?

我只是希望我的主线程在退出之前等待任何和所有我的(p)线程完成.

由于不同的原因,线程出现了很多,我真的不想跟踪所有这些 - 我只是想知道它们什么时候都消失了.

wait()为子进程执行此操作,在没有子进程时返回ECHILD,但是等待(似乎没有)(p)线程.

我真的不想经历保存每个未完成线程列表的麻烦(因为它们来来去去),然后必须在每个线程上调用pthread_join.

有一个快速而肮脏的方法来做到这一点?

c linux multithreading pthreads posix-api

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

pthread_create并传递一个整数作为最后一个参数

我有以下功能:

void *foo(void *i) {
    int a = (int) i;
}

int main() {
    pthread_t thread;
    int i;
    pthread_create(&thread, 0, foo, (void *) i);
}
Run Code Online (Sandbox Code Playgroud)

在编译时,有一些关于强制转换((void *) iint a = (int) i)的错误.如何pthread_create正确传递整数作为最后一个参数?

c pthreads

34
推荐指数
4
解决办法
7万
查看次数

使用pthread互斥锁保护变量是否保证它也不会被缓存?

考虑一个简单的(在我的情况下是全局)变量:

int i;
Run Code Online (Sandbox Code Playgroud)

在某处访问此变量

pthread_mutex_lock(i_mutex);
if(i == other value) {
  do_something();
}
pthread_mutex_unlock(i_mutex);
Run Code Online (Sandbox Code Playgroud)

另一个线程i 在保持时更新i_mutex.编译器可以缓存值,i所以我没有得到最近的值?一定i是不稳定的?

c pthreads

33
推荐指数
2
解决办法
6718
查看次数

gnu/Linux上pthread和fork的区别

pthread和fork wrt linux在实现差异以及调度如何变化(它是否变化?)方面的基本区别是什么?

我在两个类似的程序上运行strace,一个使用pthreads而另一个使用fork,最后make clone()syscall都有不同的参数,所以我猜这两个在linux系统上基本相同,但是pthreads更容易处理在代码中.

有人可以给出深刻的解释吗?

编辑:另见相关问题

fork pthreads linux-kernel

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

如何使用C++ 11 std :: thread设置stacksize

我一直在努力熟悉C++ 11中的std :: thread库,并且遇到了绊脚石.

最初我来自posix线程背景,并想知道如何在构造之前设置std :: thread的堆栈大小,因为我似乎无法找到执行此类任务的任何引用.

使用pthreads设置堆栈大小是这样的:

void* foo(void* arg);
.
.
.
.
pthread_attr_t attribute;
pthread_t thread;

pthread_attr_init(&attribute);
pthread_attr_setstacksize(&attribute,1024);
pthread_create(&thread,&attribute,foo,0);
pthread_join(thread,0);
Run Code Online (Sandbox Code Playgroud)

使用std :: thread时有类似的东西吗?

我一直在使用以下参考:

http://en.cppreference.com/w/cpp/thread

c++ multithreading pthreads c++11

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

Go的多线程和pthread或Java线程有什么区别?

Go的多线程方法和其他方法有什么区别,比如pthread,boost :: thread或Java Threads?

c++ java multithreading pthreads go

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

main()会捕获从线程抛出的异常吗?

我有一个非常大的应用程序,它动态加载共享对象并在共享对象中执行代码.作为一种预防措施,我在几乎所有内容中都试了一下main.我为3件事创造了一个捕获:( myException内部异常)std::exception,和...(捕获所有异常).

作为共享对象执行的一部分,pthreads创建了许多对象.当一个线程抛出异常时,它不会被捕获main.这是标准行为吗?我怎样才能捕获所有异常,无论它们被抛出什么线程?

c++ exception-handling pthreads

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

如何让CMake识别Ubuntu上的pthread?

如果我直接使用g ++在命令行上编译,我可以看到我需要的一切:

$ g++ -pthread test.cpp
$ ldd a.out
    linux-vdso.so.1 =>  (0x00007fffd05b3000)
    libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007f4a1ba8d000)
    libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f4a1b870000)
    ...more...
Run Code Online (Sandbox Code Playgroud)

然后我尝试为这个5行测试应用程序创建一个简单的cmake文件:

$ cat CMakeLists.txt 
PROJECT ( Test CXX )
CMAKE_MINIMUM_REQUIRED ( VERSION 2.8 )
FIND_PACKAGE ( Threads REQUIRED )
ADD_EXECUTABLE ( test test.cpp )
TARGET_LINK_LIBRARIES ( test ${CMAKE_THREAD_LIBS_INIT} )
Run Code Online (Sandbox Code Playgroud)

但是,我无法弄清楚为什么CMake找不到它需要用的东西Threads:

$ cd build/
$ cmake ..
CMake Error at /usr/share/cmake-2.8/Modules/FindPackageHandleStandardArgs.cmake:97 (MESSAGE):
  Could NOT find Threads (missing: Threads_FOUND)
Call Stack (most recent call first):
  /usr/share/cmake-2.8/Modules/FindPackageHandleStandardArgs.cmake:288 (_FPHSA_FAILURE_MESSAGE)
  /usr/share/cmake-2.8/Modules/FindThreads.cmake:166 (FIND_PACKAGE_HANDLE_STANDARD_ARGS) …
Run Code Online (Sandbox Code Playgroud)

c++ pthreads cmake ubuntu-12.10

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

互斥锁线程

我是多线程/流程编程的新手.所以这就是我需要澄清的内容.

处理代码

pthread_mutex_lock()
    pthread_create(fooAPI(sharedResource)) //fooAPI creates another thread with shared resource that shares across processes.
pthread_mutex_unlock()
Run Code Online (Sandbox Code Playgroud)

使用上面的伪代码,sharedResource如果未解锁互斥锁,进程B是否能够访问?

如何正确访问进程B中的sharedResource?

有没有明确的可视图解释互斥体,线程和进程之间的关系?

c linux mutex pthreads multiprocess

31
推荐指数
1
解决办法
9万
查看次数