文档章节

多线程之 pthread_key_*

老汉-憨憨
 老汉-憨憨
发布于 2017/07/24 15:52
字数 204
阅读 10
收藏 0
点赞 0
评论 0
#include <pthread.h>
#include <stdio.h>
#include <stdlib.h>

#define MAX_PTHREAD (5)

pthread_key_t log_key;

void write_log(const char *msg)
{
    if (!msg) {
        return;
    }

    FILE *logFile = (FILE *)pthread_getspecific(log_key);
    if (logFile) {
        fprintf(logFile, "Thread :%ld, msg = %s\n", pthread_self(), msg);
    }
}

void close_file(void *logFile)
{
    if (logFile) {
        fclose((FILE *)logFile);
        logFile = NULL;
    }
}

void *threadStart(void *args)
{
    char filename[1024] = {'\0'};
    FILE *logFile = NULL;
    snprintf(filename, sizeof(filename) - 1, "thread_%ld.log", (long)pthread_self());
    logFile = fopen(filename, "w");
    if (!logFile) {
        pthread_exit(NULL);
    }
    pthread_setspecific(log_key, (void *)logFile);

    write_log("test pthread key!");
}

int main(int argc, char *argv[])
{
    int i;
    pthread_key_create(&log_key, close_file);

    pthread_t thread[MAX_PTHREAD];
    for (i = 0; i < MAX_PTHREAD; i++) {
        pthread_create(&thread[i], NULL, threadStart, NULL);
    }

    for (i = 0; i < MAX_PTHREAD; i++) {
        pthread_join(thread[i], NULL);
    }

    return 0;
}

编译输出:

cc key2.c -o key2 -lpthread

#运行生成 5 个文件
thread_1095313728.log  thread_1117501760.log  thread_1083889984.log  thread_1109109056.log  thread_1125894464.log
后面的数字为线程ID

cat thread_1083889984.log 
Thread :1083889984, msg = test pthread key!

cat thread_1095313728.log 
Thread :1095313728, msg = test pthread key!

 

© 著作权归作者所有

共有 人打赏支持
老汉-憨憨
粉丝 18
博文 322
码字总数 68382
作品 0
深圳
程序员
Linux多线程Pthread学习小结

简介 POSIX thread 简称为pthread,Posix线程是一个POSIX标准线程.该标准定义内部API创建和操纵线程. 作用 线程库实行了POSIX线程标准通常称为pthreads.pthreads是最常用的POSIX系统如Linux...

长平狐 ⋅ 2013/01/06 ⋅ 0

Linux多线程Pthread学习小结

简介 POSIX thread 简称为pthread,Posix线程是一个POSIX标准线程.该标准定义内部API创建和操纵线程. 作用 线程库实行了POSIX线程标准通常称为pthreads.pthreads是最常用的POSIX系统如Linux...

晨曦之光 ⋅ 2012/03/02 ⋅ 0

Linux中的线程局部存储(一)

在 Linux系统中使用C/C++进行多线程编程时,我们遇到最多的就是对同一变量的多线程读写问题,大多情况下遇到这类问题都是通过锁机制来处理,但这对 程序的性能带来了很大的影响,当然对于那些...

follitude ⋅ 2016/06/17 ⋅ 0

使用printf这样标准输入输出函数的线程,是否必须使用线程特定数据来确保线程安全?

Linux 下C语言写的多线程程序中: 有介绍说:标准输入输出函数 是非线程安全的。 那是不是就是说,只要我在多线程程序中,使用了标准输入输出函数,就要使用像线程特定数据这样的手段,确保线...

怪蜀黍 ⋅ 2012/11/12 ⋅ 4

Linux多线程编程[精]

1 引言   线程(thread)技术早在60年代就被提出,但真正应用多线程到操作系统中去,是在80年代中期,solaris是这方面的佼佼者。传统的Unix也支持线程的概念,但是在一个进程(process)中...

AlphaJay ⋅ 2010/04/20 ⋅ 2

Linux环境编程--多线程

本文作者: 姚继锋 (2001-08-11 09:05:00) 时隔多年 原文地址已经无从查。。。 居然是2001年就写了 今天看来对初学者还是很有参考意义 所以特转给大家 本人在原文基础上适当修改 1 引言 线程(...

晨曦之光 ⋅ 2012/03/09 ⋅ 0

Linux操作系统下的多线程编程详细解析

线程(thread)技术早在60年代就被提出,但真正应用多线程到操作系统 中 去,是在80年代中期,solaris 是这方面的佼佼者。传统的Unix 也 支持线程的概念,但是在一个进程 (process)中只允许...

长平狐 ⋅ 2012/09/03 ⋅ 0

pthread_key_t和pthread_key_create()的使用

pthreadkeyt和pthreadkeycreate()的使用 2011-07-20 10:18:23 转自网络:广告童装批发 下面说一下线程中特有的线程存储, Thread Specific Data 。线程存储有什么用了?他是什么意思了?大家...

LiSteven ⋅ 2013/03/31 ⋅ 0

Linux 多线程学习

1 引言 线程(thread)技术早在60年代就被提出,但真正应用多线程到操作系统中 去,是在80年代中期,solaris是这方面的佼佼者。传统的Unix也支持线程的概念,但是在一个进程(process)中只允...

鉴客 ⋅ 2010/12/16 ⋅ 0

linux下多进程与多线程编程

(一) 理解Linux下进程的结构    Linux下一个进程在内存里有三部份的数据,就是“数据段”,“堆栈段”和“代码段”,其实学过汇编语言的人一定知道,一般的CPU象I386,都有上述三种段寄存...

logosky ⋅ 2013/11/19 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

个人博客的运营模式能否学习TMALL天猫质量为上?

心情随笔|个人博客的运营模式能否学习TMALL天猫质量为上? 中国的互联网已经发展了很多年了,记得在十年前,个人博客十分流行,大量的人都在写博客,而且质量还不错,很多高质量的文章都是在...

原创小博客 ⋅ 今天 ⋅ 0

JavaScript零基础入门——(十一)JavaScript的DOM操作

JavaScript零基础入门——(十一)JavaScript的DOM操作 大家好,欢迎回到我们的JavaScript零基础入门。最近有些同学问我说,我讲的的比书上的精简不少。其实呢,我主要讲的是我在开发中经常会...

JandenMa ⋅ 今天 ⋅ 0

volatile和synchronized的区别

volatile和synchronized的区别 在讲这个之前需要先了解下JMM(Java memory Model :java内存模型):并发过程中如何处理可见性、原子性、有序性的问题--建立JMM模型 详情请看:https://baike.b...

MarinJ_Shao ⋅ 今天 ⋅ 0

深入分析Kubernetes Critical Pod(一)

Author: xidianwangtao@gmail.com 摘要:大家在部署Kubernetes集群AddOn组件的时候,经常会看到Annotation scheduler.alpha.kubernetes.io/critical-pod"="",以表示这是一个关键服务,那你知...

WaltonWang ⋅ 今天 ⋅ 0

原子性 - synchronized关键词

原子性概念 原子性提供了程序的互斥操作,同一时刻只能有一个线程能对某块代码进行操作。 原子性的实现方式 在jdk中,原子性的实现方式主要分为: synchronized:关键词,它依赖于JVM,保证了同...

dotleo ⋅ 今天 ⋅ 0

【2018.06.22学习笔记】【linux高级知识 14.4-15.3】

14.4 exportfs命令 14.5 NFS客户端问题 15.1 FTP介绍 15.2/15.3 使用vsftpd搭建ftp

lgsxp ⋅ 今天 ⋅ 0

JeeSite 4.0 功能权限管理基础(Shiro)

Shiro是Apache的一个开源框架,是一个权限管理的框架,实现用户认证、用户授权等。 只要有用户参与一般都要有权限管理,权限管理实现对用户访问系统的控制,按照安全规则或者安全策略控制用户...

ThinkGem ⋅ 昨天 ⋅ 0

python f-string 字符串格式化

主要内容 从Python 3.6开始,f-string是格式化字符串的一种很好的新方法。与其他格式化方式相比,它们不仅更易读,更简洁,不易出错,而且速度更快! 在本文的最后,您将了解如何以及为什么今...

阿豪boy ⋅ 昨天 ⋅ 0

Python实现自动登录站点

如果我们想要实现自动登录,那么我们就需要能够驱动浏览器(比如谷歌浏览器)来实现操作,ChromeDriver 刚好能够帮助我们这一点(非谷歌浏览器的驱动有所不同)。 一、确认软件版本 首先我们...

blackfoxya ⋅ 昨天 ⋅ 0

线性回归原理和实现基本认识

一:介绍 定义:线性回归在假设特证满足线性关系,根据给定的训练数据训练一个模型,并用此模型进行预测。为了了解这个定义,我们先举个简单的例子;我们假设一个线性方程 Y=2x+1, x变量为商...

wangxuwei ⋅ 昨天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部