Questions tagged «pthreads»

Pthreads(POSIX线程)是用于创建和操作线程的基于C的标准化API。当前由POSIX.1-2008(IEEE Std 1003.1,2013 Edition / The Open Group Base Specification Issue 7)定义。

14
在Linux中对pthread_create的未定义引用
我从https://computing.llnl.gov/tutorials/pthreads/在网络上获取了以下演示 #include <pthread.h> #include <stdio.h> #define NUM_THREADS 5 void *PrintHello(void *threadid) { long tid; tid = (long)threadid; printf("Hello World! It's me, thread #%ld!\n", tid); pthread_exit(NULL); } int main (int argc, char *argv[]) { pthread_t threads[NUM_THREADS]; int rc; long t; for(t=0; t<NUM_THREADS; t++){ printf("In main: creating thread %ld\n", t); rc = …





5
Valgrind检测到仍可达到泄漏
该块中提到的所有功能都是库功能。我该如何纠正此内存泄漏? 它在“ 仍可访问 ”类别下列出。(还有4个,它们非常相似,但是大小不同) 630 bytes in 1 blocks are still reachable in loss record 5 of 5 at 0x4004F1B: calloc (vg_replace_malloc.c:418) by 0x931CD2: _dl_new_object (dl-object.c:52) by 0x92DD36: _dl_map_object_from_fd (dl-load.c:972) by 0x92EFB6: _dl_map_object (dl-load.c:2251) by 0x939F1B: dl_open_worker (dl-open.c:255) by 0x935965: _dl_catch_error (dl-error.c:178) by 0x9399C5: _dl_open (dl-open.c:584) by 0xA64E31: do_dlopen (dl-libc.c:86) …
154 c  pthreads  valgrind 

4
为什么pthread_cond_wait有虚假的唤醒?
引用手册页: 使用条件变量时,总是存在一个布尔谓词,其中涉及与每个条件等待相关联的共享变量,如果线程应该继续执行,则为true。从pthread_cond_timedwait()或pthread_cond_wait()函数可能会引起虚假的唤醒。由于pthread_cond_timedwait()或pthread_cond_wait()的返回并不暗示此谓词的值,因此应在返回时重新评估该谓词。 因此,pthread_cond_wait即使您未发出信号也可以返回。至少乍一看,这似乎很残酷。就像一个函数,它随机返回错误的值,或者在它真正到达正确的return语句之前随机返回。似乎是一个重大错误。但是他们选择在手册页中记录而不是修复它的事实似乎表明,有一个正当的理由导致pthread_cond_wait虚假地醒来。据推测,它的工作方式具有内在的本质,使它无济于事。问题是什么。 为什么会pthread_cond_wait虚假归还?为什么不能保证只有在正确发出信号后才能唤醒它?谁能解释其伪造行为的原因?
145 c  pthreads 

2
-pthread标志在编译时的意义
在各种多线程C和C ++项目中,我已经看到该-pthread标志同时应用于编译和链接阶段,而其他人则根本不使用它,而只是-lpthread转到链接阶段。 有没有编译和链接-pthread标志的危险-即-pthread实际上是做什么的?我主要对Linux平台感兴趣。
143 c++  c  linux  pthreads 

3
mingw-w64线程:posix vs win32
我正在Windows上安装mingw-w64,有两个选项:win32线程和posix线程。我知道win32线程和pthread之间有什么区别,但是我不明白这两个选项之间有什么区别。我怀疑如果我选择posix线程是否会阻止我调用WinAPI函数(如CreateThread)。 看来,此选项指定某个程序或库将使用哪个线程API,但又由什么使用?是通过GCC,libstdc ++还是其他? 我发现了这一点: Windows的gcc端口中的thread_posixs和thread_win32有什么区别? 简而言之,对于此版本的mingw,thread-posix版本将使用posix API并允许使用std :: thread,而threads-win32将使用win32 API,并禁用std :: thread部分。标准。 好的,如果我选择win32线程,则std :: thread将不可用,但仍将使用win32线程。但是用什么呢?
127 windows  gcc  pthreads  mingw 


8
由pthread_create()调用的函数有多个参数?
我需要将多个参数传递给要在单独线程上调用的函数。我已经读到,执行此操作的典型方法是定义一个struct,向该函数传递一个指向该struct的指针,然后将其取消引用以用作参数。但是,我无法使它正常工作: #include <stdio.h> #include <pthread.h> struct arg_struct { int arg1; int arg2; }; void *print_the_arguments(void *arguments) { struct arg_struct *args = (struct arg_struct *)args; printf("%d\n", args -> arg1); printf("%d\n", args -> arg2); pthread_exit(NULL); return NULL; } int main() { pthread_t some_thread; struct arg_struct args; args.arg1 = 5; args.arg2 = 7; …
93 c  pthreads 


4
PTHREAD_MUTEX_INITIALIZER与pthread_mutex_init(&mutex,param)
之间有什么区别 pthread_mutex_t lock = PTHREAD_MUTEX_INITIALIZER; 要么 pthread_mutex_t lock; pthread_mutex_init ( &lock, NULL); 如果仅使用第一种方法,我是否足够安全? 注意:我的问题主要涉及非常小的程序,在这些程序中,我最多要做的是将多个客户端连接到服务器,并使用辅助线程解决其查询。
89 c  ubuntu  pthreads  mutex 


9
来自类的pthread函数
假设我有一个像 class c { // ... void *print(void *){ cout << "Hello"; } } 然后我有一个向量c vector<c> classes; pthread_t t1; classes.push_back(c()); classes.push_back(c()); 现在,我想在 c.print(); 以下是给我以下问题: pthread_create(&t1, NULL, &c[0].print, NULL); 错误输出:无法将参数'3'的'void *(tree_item :: )(void)'转换为'void *()(void)'到'int pthread_create(pthread_t *,const pthread_attr_t *,void *()(void),无效*)'
86 c++  pthreads 

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.