Mac 上的 system() 函数不支持多线程?
我尝试创建一些线程,通过 Mac 上的 system()
函数来 ping 不同的服务器。代码如下:
sprintf(str,"#!/bin/sh\n ping -c 3 -t 3 -o %d.%d.%d.%d \n",dataIP1[0],dataIP1[1],dataIP1[2],dataIP1[3]);
int ret =system(str);
但我发现如果有一个服务器不可用,最后一个线程必须花费超过 3 秒才能 ping 该服务器,而且即使该服务器可用。所以我猜测system()
函数不支持多线程。看起来它内部有一个locker,所以即使你同时在不同的线程中调用它,它也只能一项一项地完成工作。
正确吗?
I try to create some threads to ping different servers by system()
function on Mac. The code looks like this:
sprintf(str,"#!/bin/sh\n ping -c 3 -t 3 -o %d.%d.%d.%d \n",dataIP1[0],dataIP1[1],dataIP1[2],dataIP1[3]);
int ret =system(str);
But I found if there was a server unavailable, the last threads have to cost more than 3s to ping this servers and also even if this server is available. So I guess that the system()
function does not support multi-thread. It looks like there is a locker inside itself, so it can only do the job one by one even you invoke it in different thread at the same time.
Is it correct?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论