线程数据

多线程中的三种数据:

           全局变量, 局部变量, 线程数据(TSD: thread-specific data)

TSD:  “属于某个线程的全局变量”

线程数据(tsd)的使用:

    和线程数据相关的函数主要有4个:创建一个键;为一个键指定线程数据;从一个键读取线程数据;删除键。

互斥锁:   保证一次只有一个线程在执行代码。

           每次在lock之中都锁定  一段操作代码, 比如写得时候要lock, lock住后还需要判断是否满。需要判断。

     这个时候就需要在lock之中改变一个表示是否满的 条件变量。

          

时间: 2024-11-05 20:48:07

线程数据的相关文章

Java多线程与并发库高级应用之线程数据交换Exchanger

JDK1.5提供了Exchanger用于两个线程的数据交换.两个线程先后到达交换点,先到达的线程会等待后到达的线程,然后两个线程互相交换数据,交换后双方持对方的数据. Exchanger只提供了一个构造器: Exchanger():创建一个新的Exchanger. Exchanger中也只有两个方法: V exchange(V x): 等待另一个线程到达此交换点(除非当前线程被中断),然后将给定的对象传送给该线程,并接收该线程的对象. V exchange(V x, long timeout,

java 使用volatile实现线程数据的共享

直接上代码看效果: public class VolatileTest extends Thread { private volatile boolean isRunning = true; private void setRunning(boolean s) { isRunning = s; } @Override public void run() { System.out.println(isRunning); while (isRunning) { //System.out.printl

74、CallContext线程数据缓存-调用上下文 System.Runtime.Remoting.Messaging,JOIN序列化过程中日期的处理

原文地址:https://www.cnblogs.com/springsnow/p/9434008.html

ThreadLocal实现:java线程范围内的共享数据,线程外独立

场景应用:银行转账时,A给B转账,C给D转账.两者都是调用的connection.begainTransaction();connection.commit(); 如何才能保证A,B同在一个线程中,C.D同在一个线程中,且A,BC,D在线程内共享,在线程外独立. 方法一,Map<Thread, Integer>实现: /** * 线程范围内的共享数据 */ package cn.itcast.lesson5; import java.util.HashMap; import java.util

线程特定数据TSD总结

一线程的本质 二线程模型的引入 三线程特定数据 四关键函数说明 五刨根问底啥原理 六私有数据使用示例 七参考文档 一.线程的本质 Linux线程又称轻量进程(LWP),也就说线程本质是用进程之间共享用户空间模拟实现的. 二.线程模型的引入 线程模型引入是为了数据共享,为什么又引入线程私有数据?有时候想让基于进程的接口适应多线程环境,这时候就需要为每个线程维护一份私有数据了,最典型的就是errno了. 在维护每个线程的私有数据的时候,我们可能会想到分配一个保存线程数据的数组,用线程的ID作为数组的

C# 如何保证对象线程内唯一:数据槽(CallContext)

如果说,一个对象保证全局唯一,大家肯定会想到一个经典的设计模式:单例模式,如果要使用的对象必须是线程内唯一的呢? 数据槽:CallContext,ok看下msdn对callcontent的解释. CallContext 是类似于方法调用的线程本地存储区的专用集合对象,并提供对每个逻辑执行线程都唯一的数据槽.数据槽不在其他逻辑线程上的调用上下文之间共享.当 CallContext 沿执行代码路径往返传播并且由该路径中的各个对象检查时,可将对象添加到其中. 也就是说,当前线程对对象进行储存到线程本地

操作线程私有数据的函数主要有4个:

在线程内部,线程私有数据可以被各个函数访问到,但它对其他线程是屏蔽的. 使用线程数据时,首先要为每个线程数据创建一个相关联的键.在各个线程内部,都使用这个公用的键来指代线程数据,但是在不同的线程中,这个键代表的数据是不同的.也就是说,key一旦被创建,所有线程都可以访问它,但各线程可根据自己的需要往key中填入不同的值.这相当于提供了一个同名而不同值的全局变量,一键多值. 操作线程私有数据的函数主要有4个:pthread_key_create(创建一个键)pthread_setspecific(

如何实现线程范围内共享数据 -- ThreadLocall类及其应用技巧

目标:如何保证各自线程上的数据是独立的,即A线程上数据只能被A线程操作 1:示例线程共享变量 我们先来看一个反例 package com.prepare.study; import java.util.Random; /** * @author: yinlm * @Date: Created in 2018/4/18 * @Description:多个线程数据混乱的示例 */ public class ThreadTest2 { // static 修饰 表示这是个全局变量 private st

pthread线程特定数据

线程特定数据,也被称为线程私有数据,是一种存储和查找一个特定线程相关数据的机制.我们称这个数据为线程特定或线程私有的原因,是因为每个线程访问它自己独立的数据拷贝,而不用担心和其它线程的访问的同步. 线程特定数据看似很复杂,其实我们可以把它理解为就是一个索引和指针.key结构中存储的是索引,pthread结构中存储的是指针,指向线程中的私有数据,通常是malloc函数返回的指针. POSIX要求实现POSIX的系统为每个进程维护一个称之为Key的结构数组(如图1所示),这个数组中的每个结构称之为一