Tag: multithreading

GCC 4.8中的?

我想利用C11标准提供的新primefaces操作。 但是,尝试#include适当的头文件给了我这个: csort-par.c:5:23: fatal error: stdatomic.h: No such file or directory #include http://gcc.gnu.org/wiki/C11Status上的文档似乎说自从GCC 4.7以来提供了头文件…我错过了什么? __STDC_NO_ATOMICS__未定义。 gcc –version如下: gcc (Ubuntu/Linaro 4.8.1-10ubuntu9) 4.8.1 Copyright (C) 2013 Free Software Foundation, Inc. 我确认__STDC_NO_ATOMICS__没有定义如下: #ifdef __STDC_NO_ATOMICS__ #error yes #else #error no #endif 收益率: csort-par.c:10:2: error: #error no #error no 编辑:感谢您的快速回复。 如果有人在谷歌遇到同样的问题而绊倒了这个问题,那么这是暂时的解决方案,直到他们发布GCC 4.9: UNIX便携式primefaces操作

多个线程可以访问不同位置的向量吗?

假设我有一个int向量,我已经预先填充了100个元素,值为0。 然后我创建2个线程并告诉第一个线程用数字填充元素0到49,然后告诉线程2用数字填充元素50到99。 可以这样做吗? 否则,实现这一目标的最佳方法是什么? 谢谢

Python逐行从子进程捕获stdout

我已经阅读了很多与此相关的问题并且学到了很多,但我仍然无法解决我的问题。 我正在构建一个运行c ++可执行文件的wxPython应用程序,并实时显示该可执行文件中的stdout。 我试图让这项工作遇到几个奇怪的结果。 这是我目前的设置/问题: //test.cc (compiled as test.out with gcc 4.5.2) #include int main() { FILE* fh = fopen(“output.txt”, “w”); for (int i = 0; i < 10000; i++) { printf("Outputting: %d\n", i); fprintf(fh, "Outputting: %d\n", i); } fclose(fh); return 0; } #wxPythonScript.py (running on 2.7 interpreter) def run(self): self.externalBinary = subprocess.Popen(['./test.out'], shell=False, stdout=subprocess.PIPE) […]

睡在线程中(C / POSIX线程)

我正在开发一个使用POSIX线程的multithreading应用程序。 我正在使用线程来做一个定期的工作,为此我正在使用usleep(3)来暂停线程执行。 我的问题是如何从主线程取消usleep()计时器,我尝试了pthread_kill(thread, SIGALRM)但它具有全局效果,导致主应用程序终止(默认情况下)。 这是我的伪代码: void threaded_task(void *ptr) { initialize(); while(running) { do_the_work(); usleep(some_interval); } clean_up(); release_resources(); } 这里是伪函数,用于从主线程停止(并正常关闭 )给定线程 : void stop_thread(pthread_t thread) { set_running_state(thread, 0); // Actually I use mutex staff // TODO: Cancel sleep timer so that I will not wait for nothing. // Wait for task to finish possibly running work […]

如何ptracemultithreading应用程序?

编辑(制作进展): 我试图ptrace一个vsftpd守护进程。 我有以下代码附加到守护程序。 然后它成功显示第一个衍生进程的PID。 然而,对于这个衍生进程的子进程,它返回PID为2,3,..程序确实捕获了生成进程的退出,这让我觉得我很接近。 有任何想法吗? void * trace_process(void * pid){ pid_t child = atoi((char *) pid); long orig_eax, eax; int status; int callmade = FALSE; long opt = PTRACE_O_TRACEFORK; long newpid; long trace = ptrace(PTRACE_ATTACH,child,NULL,NULL); ptrace(PTRACE_SETOPTIONS,child,NULL,opt); if(trace == FALSE) printf(“Attached to %d\n”,child); while(TRUE) { child = waitpid(-1, &status, __WALL); if (status >> 16 == […]

pthread中的读/写锁

我正在学习pthread并遇到了读者作家锁。 场景非常简单; 一个全局变量被所有线程共享,读者继续打印同一个全局变量的当前值,而writer将更新同一个变量。 我可以通过使用两个互斥锁(pthread_mutex_t)来实现此同步,但我想使用“一个”读写器锁来实现相同的结果。 但是,使用一个读写器锁,如此处所示(程序的输出,如下),读者只能看到x的第一个值,并且看不到对全局变量的任何更新。 请点亮这里。 码: #include #include #include #include #include #define ACCESS_ONCE(x) (*(volatile typeof(x) *)&(x)) int x = 0; pthread_rwlock_t lock_rw = PTHREAD_RWLOCK_INITIALIZER; void *reader_thread(void *arg) { int i; int newx, oldx; newx = oldx = -1; pthread_rwlock_t *p = (pthread_rwlock_t *)arg; if (pthread_rwlock_rdlock(p) != 0) { perror(“reader_thread: pthread_rwlock_rdlock error”); exit(__LINE__); } for […]

在PIC18上使用C的multithreading

在编写PIC18时 ,如何创建并行运行的线程,因为没有操作系统?

互斥和信号量实际上做了什么?

我想要一些关于互斥和信号量的澄清。 我的问题是, 当线程试图进入由互斥锁锁定的区域时,互斥锁实际上做了什么。 它等待锁被释放? 或b。 它进入睡眠状态,直到释放锁定。 在那种情况下,如何在释放锁定时再次唤醒? 与1相同的问题,但在这种情况下它是信号量。 你能给我一些关于C中pthread中忙碌等待的代码,还有线程进入hibernate而不是等待的情况? 睡觉意味着它是阻塞还是睡觉是另一种忙碌的等待? 我想知道一些涵盖这种情况的程序,例如一些c源代码,其中实现繁忙等待,阻塞等。

我们可以获取信号量或条件变量的文件描述符吗?

我有一个双向消息通道的实现,为了减少开销,我实现了几个循环的消息缓冲区。 要从一端写入另一端,将指向消息的指针添加到一个循环缓冲区,并调整其读取和写入索引。 要向另一个方向写入,请对其他缓冲区执行相同操作,依此类推。 代码小而简单,它避免了使用管道或fifo的开销,尽管可能在某些方面可能是更好的解决方案。 我通过简单地检查是否存在等待读取的消息,以及如果没有对在将消息添加到相关arrays时发出信号的条件变量进行定时等待来实现对此的轮询。 现在我有一个应用程序需要在套接字(或多或少)上同时等待消息通道。 我现在希望我使用过fifo或pipe,但由于代码更改的开销(长篇故事),重写它以使用fifo或pipe是不可行的。 有没有办法获得与条件变量关联的文件描述符? 如果是这样,一次对两个文件描述符实现轮询更容易,一个用于条件变量,一个用于套接字。 出于好奇,并使这个问题对于具有类似问题的其他人更有用,是否可以获得与信号量相关联的文件描述符,以便您可以同时轮询信号量和常规文件描述符?

在为该线程评论pthread_join时多次执行相同的线程子例程

我是线程新手。 这里如果我评论pthread_join(thread1,NULL),那么在输出中有时我会得到 Thread2 Thread1 Thread1 我无法理解为什么Thread1跟踪会出现两次以及pthread_join的确切function是什么。 另外,请参考一些关于初学者的线程概念的教程。 void *print_message_function( void *ptr ); main() { pthread_t thread1, thread2; char *message1 = “Thread 1”; char *message2 = “Thread 2”; int iret1, iret2; iret1 = pthread_create( &thread1, NULL, print_message_function, (void*) message1); iret2 = pthread_create( &thread2, NULL, print_message_function, (void*) message2); pthread_join( thread1, NULL); pthread_join( thread2, NULL); printf(“Thread 1 returns: […]