pthreads相关内容

C: 阻塞读应该返回,如果文件描述符被删除

我正在以被阻止的方式从设备/文件描述符读取.可能会发生,在不同的线程中关闭设备并删除文件描述符.不幸的是,读取没有返回或注意到并一直阻塞. 作为一种解决方法,我可以使用 select 作为超时来执行 while 循环.如果发生超时,我可以检查文件描述符,以防万一它不调用读取而是返回. 我想知道在 Linux-C 中是否有更好的方法? 解决方案 您所描述的代码具有固有的竞争条件 ..
发布时间:2021-06-23 18:37:08 服务器开发

为什么全局变量会给函数调用中的编译器优化带来麻烦?

来自 http://www.hpl.hp.com/techreports/2004/HPL-2004-209.pdf: 防止编译器移动内存围绕调用函数的操作,例如pthread mutex lock(),它们本质上被视为对不透明函数的调用,编译器会对此进行调用没有信息.编译器有效地假设pthread mutex lock() 可以读取或写入任何全局变量.因此内存引用不能简单地跨调用移动.这种 ..
发布时间:2021-06-23 18:37:03 C/C++开发

pthread退出时运行函数

我有一个 C++ 应用程序,我在其中创建 pthread 来运行用户提供的函数.我希望能够在线程退出时以某种方式收到警报,以便我可以将其从用于保留线程的 pthread 数组中删除.有没有办法做到这一点,或者函数应该设置一些“魔法值".因为我生成 pthread 的主要代码处于某种运行循环中,所以我可以轻松检查退出条件. 此外,是否使用 std::vector 过度跟踪我的线程是否过载?线程 ..
发布时间:2021-06-23 18:37:00 C/C++开发

在 pthread_create 中指定的函数中释放参数

我正在编写一个小型服务器,它创建一个新线程来处理每个新连接.我需要使用 pthread_create 的第四个参数将套接字传递给函数.尝试释放用于套接字的内存时,出现段错误.通讯工作正常.我试过传递一个 void* 和一个 void**(转换为 void*,有点丑) 这是我在尝试解决此问题时使用的最新 cludge,稍后将在响应函数中进行实际工作. #include #include #i ..
发布时间:2021-06-23 18:36:57 其他开发

pthread取消成功但在几百个线程后未能创建线程

这里 pthread 在 1013 个线程之后没有被创建.我知道每个进程的线程创建都有限制,但在这里我取消了线程,并且在线程中我还调用了 pthread_testcancel() 来确定取消点.实际上这里发生了什么?有人可以帮我纠正线程创建失败吗?我是多线程的新手,如果您能向我提供详细的解释,那就太好了.谢谢你. #include#include空* t(空*){而(1){pthread_tes ..
发布时间:2021-06-23 18:36:54 服务器开发

pthread_create 中的多个参数

根据pthread_create man page,该函数的参数是: int pthread_create(pthread_t *thread, const pthread_attr_t *attr,void *(*start_routine) (void *), void *arg); 关于 void *arg,我只是想知道我是否可以向它传递多个参数,因为我编写的函数需要 2 个参数. ..
发布时间:2021-06-23 18:36:50 服务器开发

单线程打印

我正在尝试使用 C 中的 Pthreads 实现一个程序.现在,我尝试让单个线程打印“Hi": void * generator(void *arguments){printf("你好");返回空;}int main(int argc, const char* argv[]){pthread_create(&threads_ids[0], NULL, &generator, NULL);=} ..
发布时间:2021-06-23 18:36:44 其他开发

如何将线程分配给C中的不同内核?

我创建了一个程序,该程序使用 4 个线程将 8 个数字相加,然后计算结果的乘积.如何确保每个线程都使用单独的内核以获得最大的性能提升.我是 pthreads 的新手,所以我真的不知道如何正确使用它.请提供尽可能简单的答案. 我的代码: #include #include #include 国际全球[9];void *sum_thread(void *arg){int *args_array ..
发布时间:2021-06-23 18:36:42 其他开发

信号处理程序不起作用

我在我的代码中使用了 czmq 和 zmq 库.我通过在 main 中调用 signal 为 SIGINT 注册了一个信号处理程序.代码如下所示: #include "czmq.h"void sig_int(int 信号);无效* pub_handler(){zctx_t *context = zctx_new ();void *publisher = zsocket_new (context, ..
发布时间:2021-06-23 18:36:39 其他开发

在 PHP 上启用 ZTS 无需编译

当我尝试使用 PECL 安装 pthreads 时,安装提示我必须启用 ZTS: configure: error: pthreads requires ZTS, please recompile PHP with ZTS enabled 我已经使用 Apt 包管理器安装了 PHP,我不想用自编译版本替换该安装. 如何在不手动编译的情况下启用 ZTS? 解决方案 你不能;Zend ..
发布时间:2021-06-23 18:36:33 PHP

PHP,启用 ZTS、Pthreads

我需要在 php 中启用 ZTS.因此,我使用“--enable-maintainer-zts"选项从源代码重新编译了 php.现在我有: "php -v" PHP 7.0.11 (cli) (built: Oct 3 2016 12:19:10) ( ZTS )版权所有 (c) 1997-2016 PHP GroupZend Engine v3.0.0,版权所有 (c) 1998-2016 ..
发布时间:2021-06-23 18:36:30 PHP

多线程独占访问资源

是否有与线程的 SIGSTOP 和 SICONT 等效的东西?正在使用 pthread.谢谢 编辑:我正在线程之间实现一种粗略的文件访问同步形式.因此,如果一个文件已经被一个线程打开,而另一个线程想要再次打开它,我需要在第二个线程执行时停止或暂停第二个线程.当第一个线程完成它的工作时,它会检查其他线程想要使用它释放的文件并“唤醒"它们.然后第二个线程从那个点恢复执行.我使用自己的簿记数据结构 ..
发布时间:2021-06-23 18:36:27 服务器开发

如果我不关心返回值,我是否需要 pthread_exit

如果我不关心线程的返回状态,我是否需要有一个 pthread_exit? 我想知道在我的数据化 pthread 中不调用 pthread_exit 是否可能存在一些微妙的资源问题. 谢谢. 解决方案 您不必调用 pthread_exit().从线程函数返回也同样有效,并且不会泄漏任何资源(当然,您仍然需要确保您的代码没有任何泄漏). ..
发布时间:2021-06-23 18:36:25 C/C++开发

2+ 线程写入/读取变量的真正危险

同时读/写单个变量的真正危险是什么? 如果我使用一个线程写入变量,另一个线程在 while 循环中读取变量,并且在写入时读取变量并且使用旧值没有危险,那么这里还有什么危险? > 同时读/写是否会导致线程崩溃,或者当发生精确的同时读/写时,底层会发生什么? 解决方案 如果两个线程在没有适当同步的情况下访问一个变量,并且这些访问中至少有一个是写操作,那么您就会出现数据竞争和未定义的行 ..
发布时间:2021-06-23 18:36:21 其他开发

使用 pthreads 自动重新加载配置

我正在用 C 编写多线程程序,目前我每次更改配置文件时都需要重新启动程序,我的应用程序也支持标准的 SIGHUP 信号来重新加载配置,但这需要手动干预. 为了解决这个问题,我写了一个单独的线程来读取配置文件并加载它,并持续监控这个文件的任何变化. 问题是,如何在不影响性能的情况下安全地通知其他线程有关配置更改的巨大互斥锁. 我正在考虑为每个配置更改设置一个版本号,这样我只需要锁定 ..
发布时间:2021-06-23 18:36:18 其他开发

linux中XAMPP中的Pthreads

至于pthreads库,PHP必须用ZTS编译.这可以在linux的XAMPP中安装Pthreads吗.因为对于windows XAMPP,它可能没有任何问题. 您能否更正我的此安装方案或与 XAMPP 的链接?谢谢 解决方案 PHP 默认自带 PECL(PHP 扩展社区库)命令支持,省去了我们手动编译扩展的麻烦.我们可以改为运行下面的安装命令. $ pecl 安装 pthread ..
发布时间:2021-06-23 18:36:16 其他开发

等待 QProcess 完成或持续时间超过

我正在尝试针对以下情况寻找解决方案: QProcess 应该运行命令并在达到所需的持续时间或命令完成时停止执行它.这个 QProcess 是由一个 QThread Worker 启动的. 使用这个可以很容易地做到这一点: QProcess task("executedTool -parameters");任务开始();task.waitForFinished(desired_max_ ..
发布时间:2021-06-23 18:36:12 其他开发

如何在c中使用pthread调用函数?

如何使用 pthread 在单独的线程中调用函数? 在 Java 中,答案如下:如何在Java中使用单独的线程调用方法? 我如何在 C 中执行此操作? 解决方案 从技术上讲,你不能……至少不能直接. 线程是处理器在运行程序时遵循的执行路径.在今天的环境中,多线程的实例很多.最终用户应用软件通常有不同的线程做不同的事情.然而,在服务器上,不同的线程正在做同样的事情,为客户端 ..
发布时间:2021-06-23 18:36:08 其他开发

使用 open()、read() 和 write() 系统调用复制文件

我在使用 read()、write() 和 open() 将文件复制到新目录时遇到问题.我可以使用 open() 创建一个新文件,并且可以使用 write() 写入终端,但我假设如果我将我的 int 文件描述符从 open 传递给 write,write 将写入指定的文件. 除此之外,一旦我打开一个文件,权限就变得很奇怪,我只能以 root 身份打开它.每次我创建一个文件时,它都是空的,但我 ..
发布时间:2021-06-23 18:36:05 其他开发