Mac 上的 system() 函数不支持多线程?

发布于 2024-12-19 07:39:44 字数 386 浏览 2 评论 0原文

我尝试创建一些线程,通过 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文