Tag: pthreads

使用C / Pthreads:共享变量需要是不稳定的吗?

在C编程语言中,Pthreads作为线程库; 在线程之间共享的变量/结构是否需要声明为volatile? 假设他们可能受到锁定或不受保护(可能是障碍)。 pthread POSIX标准对此有任何发言权,是依赖于编译器还是不依赖于编译器? 编辑添加:感谢您的答案。 但是,如果你不使用锁,那该怎么办? 如果你使用障碍物怎么办? 或者使用比较和交换等原语直接和primefaces地修改共享变量的代码……

从main调用pthread_exit可以吗?

当我从main调用pthread_exit时,程序永远不会终止。 我期望程序完成,因为我退出程序的唯一线程,但它不起作用。 好像挂了。 #include #include #include int main(int argc, char *argv[]) { printf(“-one-\n”); pthread_exit(NULL); printf(“-two-\n”); } Process Explorer显示(仅)线程处于Wait:DelayExecution状态。 根据pthread_exit文档: 在最后一个线程终止后,进程将以退出状态0退出。 行为应该就像实现在线程终止时调用带有零参数的exit()一样。 我正在使用Dev-C ++ v4.9.9.2和pthreads-win32 v2.8.0.0 (链接libpthreadGC2.a )。 该库似乎没问题(例如,从main调用pthread_self或pthread_create可以了)。 有什么理由说我不应该从main调用pthread_exit吗?

唤醒线程在accept()调用时被阻塞

Linux上的套接字问题 我有一个在accept()调用时阻塞的工作线程。 它只是等待传入的网络连接,处理它,然后返回监听下一个连接。 当程序退出的时候,我如何发信号通知此网络工作线程(从主线程)从accept()调用返回,同时仍能正常退出其循环并处理其清理代码。 我试过的一些事情: pthread_kill发送信号。 感觉很难做到这一点,加上它不能可靠地允许线程执行它的关闭逻辑。 也使程序终止。 如果可能的话,我想避免发出信号。 pthread_cancel可以。 与上面相同。 这是对线程的严厉杀戮。 那个,线程可能正在做其他事情。 从主线程关闭listen套接字以使accept()中止。 这不可靠。 一些限制: 如果解决方案涉及使监听套接字无阻塞,那很好。 但我不想接受一个解决方案,该解决方案涉及线程每几秒钟通过一次选择呼叫唤醒以检查退出条件。 要退出的线程条件可能与退出的进程无关。 从本质上讲,我想要的逻辑看起来像这样。 void* WorkerThread(void* args) { DoSomeImportantInitialization(); // initialize listen socket and some thread specific stuff while (HasExitConditionBeenSet()==false) { listensize = sizeof(listenaddr); int sock = accept(listensocket, &listenaddr, &listensize); // check if exit condition has been set using […]

在进程之间共享条件变量和互斥:是否必须先锁定互斥锁?

我需要一些帮助来了解如何在C中使用条件变量来解决练习。 这是一个小例子: #include #include #include #include #include #include #include #include #include #include #define OKTOWRITE “/oktowrite” #define MESSAGE “/message” #define MUTEX “/lock” int main(int argc, char** argv) { pthread_cond_t* condition; pthread_mutex_t *mutex; char* message; int des_cond, des_msg, des_mutex; int mode = S_IRWXU | S_IRWXG; des_mutex = shm_open(MUTEX, O_CREAT | O_RDWR | O_TRUNC, mode); if (des_mutex < […]