memset 线程安全_popen-锁定还是线程安全?

I've seen a few implementations of popen()/pclose(). They all used a static list of pids, and no locking:

static int *pids;

static int fds;

if (!pids) {

if ((fds = getdtablesize()) <= 0)

return (NULL);

if ((pids = malloc(fds * sizeof(int))) == NULL)

return (NULL);

memset(pids, 0, fds * sizeof(int));

}

Or this, supposedly NetBSD:

static struct pid {

struct pid *next;

FILE *fp;

pid_t pid;

} *pidlist;

/* Link into list of file descriptors. */

cur->fp = iop;

cur->pid = pid;

cur->next = pidlist;

pidlist = cur;

Is it what it looks like - a not thread safe implementation? Or am I missing something obvious?

解决方案

The GNU libc implementation is threadsafe if libc is configured to be reentrant (which it is likely to be). However, this may not be the case for other implementations of libc.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
这段代码是一个函数,用于删除特定的Wi-Fi网络信息。函数接受参数ssid,表示要删除的Wi网络的名称。 首函数会检查参数的有效性。如果ssid为NULL或为空字符串会打印错误消息并跳转到末尾。 接下来,函数会遍存储Wi-Fi信息的s_wifi_list,查与参数ssid匹配的-Fi网络。如果找到了匹的网络,则将is_wifi_exist志设置为1,并循环。 在进入临界区之前,函数会使用互斥锁(OS_MutexLock)锁定对记录Wi-Fi列表进行操作的互斥访问。 如果is_wifi_exist标志为0,表示未找到与参数ssid匹配的Wi-Fi网络,则会打印错误消息并跳转到函数末尾。 如果找到了匹配的Wi-Fi网络,函数会使用app_wifi_set_erase_wifi_info函数设置要删除的Wi-Fi网络的信息,并将该网络信息替换为数组中最后一个Wi-Fi网络的信息。然后,将最后一个Wi-Fi网络的信息清空。 接下来,根据Wi-Fi网络信息的数量进行一些调整。如果当前Wi-Fi网络数量等于WIFI_INFO_CNT,则将write_idx设置为9;否则,将write_idx减1。然后,将Wi-Fi网络数量减1。 最后,根据预编译指令选择调用_wifi_info_save_to_lfs函数将Wi-Fi网络信息保存到LFS(Local File System)中,或调用_wifi_info_save函数将Wi-Fi网络信息保存到其他存储介质中。 最后,释放临界区的互斥锁(OS_MutexUnlock)并返回函数。 这段代码的作用是从Wi-Fi网络列表中删除指定的Wi-Fi网络信息,并将修改后的列表保存到存储介质中。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值