僵尸上的僵局

僵尸上的僵局,第1张

概述僵尸上的僵局

我正在编写一个运行两个线程的linux下的小应用程序(embedded在ARM上)。 我在函数中做了一个“popen”,这为进入函数的第二个线程创build了一个死锁。 但是,首先进入函数的第一个线程仍然正常运行。

这里是一些代码示例:

pthread_mutex_t mutex1 = PTHREAD_MUTEX_INITIAliZER; int sendCommand( const std::string& command,std::string& answer) { file* fd; // file descriptor to command output char answer_c[COMMAND_BUFFER_SIZE]; // The answer as char[] int answerLength = 0; // The length of the answer pthread_mutex_lock( &mutex1 ); // A probe cout << "VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV" << endl; fd = popen(command.c_str(),"r"); // <- Second thread entering is stuck here ... if(fd <= 0) { cout << "Couldn't popoen !" << endl; return -1; } // A probe,never showed by second thread entering the function cout << "ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZzz" << endl; // ... Omitted code ... // Close the file descriptor pclose(fd); pthread_mutex_unlock( &mutex1 ); }

我真的有这样的感觉,我失去了一些重要的东西。 popen怎么会发生死锁? 问题是来自标准的libc还是linux内核?

任何指针强烈感谢!

我的文件服务器程序已经停止僵尸进程

如何从控制台读取行并将其存储到c + +中的string?

(linux / X11)透明窗口上的透明opengl对象以纯色背景显示窗口背后的内容

控制windows 7的任务栏分组为我的应用程序

linux的C – 获取locking键状态'

问候,

如何停止运行阻塞永久循环的QThread?

帮助这个编译错误

为什么插入字符到一个可执行的二进制文件导致它“打破”?

W8电话System.Xml.XmlException&

注册一个游戏设备

由于popen做了一个fork(这不是线程安全的),所以popen也不是线程安全的。

这个问题和答案可能会帮助你一点。

总结

以上是内存溢出为你收集整理的僵尸上的僵局全部内容,希望文章能够帮你解决僵尸上的僵局所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1241292.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-06
下一篇 2022-06-06

发表评论

登录后才能评论

评论列表(0条)

保存