pthread_getspecific()--读线程私有数据|pthread_setspecific()--写线程私有数据

原型:

#include <pthread.h>
void *pthread_getspecific(pthread_key_t key);
int pthread_setspecific(pthread_key_t key, const void *value);

说明:
TSD 的读写都通过上面两个专门的 Posix Thread 函数进行。

函数 pthread_setspecific() 将 pointer 的值 (不是锁指的内容) 与key 相关联。

函数 pthread_getspecific() 将与 key 相关联的数据读出来。返回的数据类型都是 void *,因此可以指向任何类型的数据。 

在多线程程序中,经常要用全局变量来实现多个函数间的数据共享。由于数据空间是共享的,因此全局变量也为所有进程共有。但有时应用程序设计中必要提供线程私有的全局变量,这个变量仅在线程中有效,但却可以跨过多个函数访问。

比如在程序里可能需要每个线程维护一个链表,而会使用相同的函数来操作这个链表,最简单的方法就是使用同名而不同变量地址的线程相关数据结构。这样的数据结构可以由 Posix 线程库维护,成为线程私有数据 (Thread-specific Data,或称为 TSD)。 
时间: 2024-11-10 21:04:25

pthread_getspecific()--读线程私有数据|pthread_setspecific()--写线程私有数据的相关文章

为什么学习大数据,大数据科学家写给大数据学习者的坚定理由

点进来的同学,大部分是为了学编程而来的,这里面有一部分学编程是出于兴趣爱好,但大部分都是为了找工作或跳槽吧!其中有些人也许是觉得难,也许是遇到瓶颈,也许是因为惰性,总之半途而废了.在这新一年的开始,我想对你说一句:不要轻易放弃,如果你觉得艰难,说明你正在走上坡路!在为你讲为什么要学习大数据前给分享一个大数据资料分享群119599574每天分享大数据学习资料和学习方法 ,让我们一起成长, 为什么我支持你学编程呢,先来看以下几个例子: 马化腾,93年深大计算机系毕业,进入润迅通信从软件工程师做到开发

多个写线程一个读线程的无锁队列实现

在之前的一篇博客中,写了一个在特殊情况下,也就是只有一个读线程和一个写线程的情况下,的无锁队列的实现.其中甚至都没有利用特殊的原子加减操作,只是普通的运算.这样做的原因是,即使是特殊的原子加减操作,也比普通的加减运算复杂度高很多.因此文中的实现方法可以达到很高的运行效率. 但是,有的情况下并不是只有一个读线程和一个写线程.越是一般化的实现,支持的情况越多,但是往往损失的性能也越多.作者看到过一个实现(http://www.oschina.net/code/snippet_732357_13465

IO流 FileWriter 对已有文件的数据续写

package com.yyq; import java.io.*; /* * IO异常的处理方式 * */ public class FileWriterDemo2 { public static void main(String[] args) { // TODO Auto-generated method stub /* * FileNotFoundException 文件找不到异常 是IO异常的一个子类 NullPointerException 空指针异常 * 异常的专业处理方式,在外面

Google多线程面试题: 4个线程向4个文件里写入数据, 每个线程只能写一个值

By Long Luo 个人博客链接 最近在学习Java多线程时,遇到了一个下面的笔试题,题目如下: 编写一个程序,程序会启动4个线程,向4个文件A,B,C,D里写入数据,每个线程只能写一个值. 线程A:只写A 线程B:只写B 线程C:只写C 线程D:只写D 4个文件A,B,C,D. 程序运行起来,4个文件的写入结果如下: A:ABCDABCD... B:BCDABCDA... C:CDABCDAB... D:DABCDABC... 网上搜索了下,好像还是一个Google笔试题,这个问题涉及到的

线程同步——用户模式下线程同步——Slim读写锁实现线程同步

1 //Slim读/写锁实现线程同步 2 SRWlock 的目的和关键段相同:对同一资源进行保护,不让其它线程访问. 3 但是,与关键段不同的是,SRWlock允许我们区分哪些想要读取资源的线程(读取者线程) 4 和哪些想要更新资源值的线程(写入者线程).让所有读取者资源在同一时刻访问共享资源应该是 5 可行的,这是因为仅仅读取资源并不存在破坏数据的风险.只有当写入者线程想要对资源进行更新时才需要同步. 6 这种情况下,写入者线程应该独占资源访问权:任何线程,无论是读取还是写入者线程,都不许访问

C线程代业代写代调试、POSIX Threads代编码

C线程代业代写代调试.POSIX Threads代编码(CSCI 363) Project Two -- POSIX ThreadsInstructionsThis program sorts strings using "enzymes". An enzyme is a function that sorts two consecutive characters. We define one enzyme per pair of consecutive characters; the

好程序员分享大数据教程之线程高级部分

好程序员分享大数据教程之线程高级部分,首先讲一下线程的生命周期 对于一个线程, 在被创建后, 不是立即就进入到了运行状态, 也不是一直处于运行状态, 在线程的声明周期中, 一个线程会在多种状态之间进行切换 new : 新生状态, 线程被实例化, 但是还没有开始执行(start) runnable: 就绪状态, 已经执行过start, 线程已经启动了, 只是没有抢到CPU时间片 running: 运行状态, 抢到了CPU时间片 blocked: 阻塞状态, 线程执行的过程中, 遇到一些特殊情况,

怎样去写线程安全的代码(Java)

使用多线程就可能会存在线程安全的问题.很多 java 程序员对写多线程都很挣扎,或者仅仅理解那些是线程安全的代码,那些不是.这篇文章我并不是详述线程安全,详述同步机制的文章,相反我只是用一个简单的非线程安全的代码例子引领大家,然后重点是去理解什么是线程安全,以及怎样使代码变得线程安全. 好了,下面我们先来看一个非线程安全的代码,可以尝试找找为什么非线程安全? /* * 非线程安全类 */ public class Counter { private int count; public int g

Java 线程第三版 第三章数据同步 读书笔记

多线程间共享数据问题 一.Synchronized关键字 atomic一词与"原子"无关,它曾经被认为是物质的最小的单元,不能再被拆解成更小的部分. 当一个方法被声明成synchronized,要执行此方法的thread必须先取得一个token,我们将它称为锁.一旦该方法取得(或者说是获得)锁,它将运行此方法然后释放掉(或者返回)此锁.不管方法时怎样返回的(包括通过异常)该锁会被释放. 二.Volatile关键字 如果变量被标示为volatile,每次使用该变量时都必须从主寄存器中读出