当前位置:  技术问答>linux和unix

[在线]关于APUE中的一段代码,有些迷惑,请教。

    来源: 互联网  发布时间:2016-10-17

    本文导语:  APUE | fig12.13 代码如下: #include  #include   #include   #include   static pthread_key_t key;  static pthread_once_t init_done = PTHREAD_ONCE_INIT;  pthread_mutex_t env_mutex = PTHREAD_MUTEX_INITIALIZER;  extern char **environ;  static void  thread_i...

APUE | fig12.13 代码如下:

#include 
#include  
#include  
#include  
static pthread_key_t key; 
static pthread_once_t init_done = PTHREAD_ONCE_INIT; 
pthread_mutex_t env_mutex = PTHREAD_MUTEX_INITIALIZER; 
extern char **environ; 
static void 
thread_init(void) 

    pthread_key_create(&key, free); 

char * 
getenv(const char *name) 

    int     i, len; 
    char    *envbuf; 
    pthread_once(&init_done, thread_init); 
    pthread_mutex_lock(&env_mutex); /* 1. 为什么在这里就加锁,保护malloc()吗? */
    envbuf = (char *)pthread_getspecific(key); 
    if (envbuf == NULL) { 
        envbuf = malloc(ARG_MAX); 
        if (envbuf == NULL) { 
            pthread_mutex_unlock(&env_mutex); 
            return(NULL); 
        } 
        pthread_setspecific(key, envbuf); 
    } 
    len = strlen(name); 
/* 2. 我认为应该从这里开始加锁 */
    for (i = 0; environ[i] != NULL; i++) { 
        if ((strncmp(name, environ[i], len) == 0) && 
          (environ[i][len] == '=')) { 
            strcpy(envbuf, &environ[i][len+1]); 
            pthread_mutex_unlock(&env_mutex); 
            return(envbuf); 
        } 
    } 
    pthread_mutex_unlock(&env_mutex); 
    return(NULL); 



我的问题是,这里的互斥量在保护什么?
我的理解是,env_mutex是在保护environ的读写访问。让我疑惑的是,作者在 1 处就加锁,看不出有什么必要。
我是认为应该从 2 开始加锁。

|
应该也可以吧,malloc是线程安全的

    
 
 

您可能感兴趣的文章:

  • 请教一个SH脚本的写法(在线等)
  • 在线等待!!请教soloaris9 for x86的安装方法
  • 请教内核ppp代码的内容——在线等
  • 请教个小问题,在线等.....望大家帮忙
  • 急,在线等待!!!请教个问题,linux下的远程控制软件是什么,可以在那里取得,多谢?
  • 新手虚心请教.在线等复....vsftp配置成功后,本机可以FTP上,但其他系统通过FTP工具不能上.防火墙不能关..
  • 请教各位高手!!!gcc有问题,怎么办啊?怎样重装它啊???在线等
  • 请教DNS问题?在线等待
  • 请教:如何使对话框弹出是位于最顶层(在线)
  • 急急急,请教有经验的大侠???--在线等候
  • 在线源代码编辑器 EditArea iis7站长之家
  • 请教构架一个BBS的步骤!在线等!!!!!!!!!!!!!!
  • ftp 命令请教, 在线等候, 高分相送
  • 请教:jdbNavList如何才能出现滚动条?(在线等待)
  • 在线请教:如果在JSP页面中上载文件到服务器端?
  • 请教简单问题!在线等。。。马上结贴
  • 在线等待!请教Linux中删除用户使用什么命令?
  • 请教:solaris经常自动重启或者死机,请问如何查找问题?在线等。
  • 在线等待: 请教red hat 9下一流的汉化软件
  • 在线等待回音,请教各位同仁如何中断I/O阻塞问题
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 在线代码编辑器 Amy Editor
  • linux下ping命令的源代码在哪个rpm包中 在线等
  • 初来乍到,再来一问,表单贴代码,在线
  • php+memcache实现的网站在线人数统计代码
  • 求调用ie代码,运行成功即给分,在线等待!
  • 什么地方有 Think in java 的代码下载(50分)在线等候!!!
  • 有人有用JAVA读一个网页代码的程序吗?(在线等!)
  • 在线等,为什么我的代码原来可以运行,现在不可以了????TextPad
  • 在哪里可以下载OREILLY的linux设备驱动程序一书的程序源代码?在线送分!
  • 谁有服务设置程序代码?在线。急200分
  • php解压文件代码实现php在线解压
  • 一段很简单的代码,关于变量的作用域问题?在线等待!
  • 使用python检测手机QQ在线状态的脚本代码
  • 兄弟们,请帮帮忙吧,关于LINUX 的调度和时钟中断处理代码的分析!在线等待啊。。。:(
  • 100分求jsp树的原代码 最好是jsp+js+xml 执行效率要高。(从数据库中动态生成的)在线
  • 在线源代码编辑器 EditArea
  • 谁有java2 图形设计(swing) 的代码?在线等待,收到给分!
  • 在LINUX上如何安装MYSQL源代码的软件包,遇到问题了,在线等,急着!!!!
  • 求统计在线人数?最简单代码
  • 高分请教关于用java实现的telnet原代码在线等待
  • 基于Html5的mockups在线工具简介
  • 装MYSQL后启动错误! mysqld ended --在线急等!在线急等!在线急等!在线急等!-----
  • MyEclipse SVN插件SubEclipse 在线离线等几种安装方式介绍
  • 智能在线表单设计器 FreeForm智能在线表单设计器
  • Linux使用群24032501,保持20人在线,目标50人在线
  • 简单的输入输出问题 在线等待 在线给分
  • 怎么用能让asp实现统计在线人数的功能。在线等待!!!帮忙送分!
  • 在线求教, 为什么不能开始除root之外的用户登录??...很急, 在线等
  • 在线等,在线给分!(简单问题,急)
  • 我需要唯一用户在线,不能两个用户同时在线的JSP实现的设计文档
  • 在线等,在线给分!!!!!!!!!!


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3