首页 理论教育 私有数据的多线程环境下的共享和管理方法

私有数据的多线程环境下的共享和管理方法

时间:2023-10-31 理论教育 版权反馈
【摘要】:在多线程环境下,进程内的所有线程共享进程的数据空间,因此全局变量为所有线程共享。线程私有数据采用了一种被称为一键多值的技术,即一个键对应多个值。操作线程私有数据的函数主要有4个:pthread_key_create(),pthread_setspecific(),pthread_getspecific()和phread_key_delete()。用pthread_setspecific为一个键指定新的线程数据时,线程必须先释放原有的线程数据以回收空间。需要注意的是,键占用的内存被释放,与该键关联的线程数据所占用的内存并不被释放。

私有数据的多线程环境下的共享和管理方法

线程环境下,进程内的所有线程共享进程的数据空间,因此全局变量为所有线程共享。在程序设计中有时需要保存线程自己的全局变量,这种特殊的变量仅在某个线程内部有效。线程私有数据采用了一种被称为一键多值的技术,即一个键对应多个值。访问数据时都是通过键值来访问的,好像是对一个键值访问。

操作线程私有数据的函数主要有4个:pthread_key_create()(创建一个键),pthread_setspecific()(为一个键设置线程私有数据),pthread_getspecific()(从一个键读取线程私有数据)和phread_key_delete()(删除一个键)。这些函数的声明如下:

●pthread_key_create():从Linux的TSD池中分配一项,将其值赋给key供以后访问使用。它的第1个参数key为指向键值的指针,第2个参数为一个函数指针,如果指针不为空,则在线程退出时将以key所关联的数据为参数调用destr_function(),释放分配的缓冲区。

●pthread_setspecific():该函数将pointer的值与key相关联。用pthread_setspecific为一个键指定新的线程数据时,线程必须先释放原有的线程数据以回收空间。(www.xing528.com)

●pthread_getspecific():通过该函数得到与key相关联的数据。

●phread_key_delete():该函数用来删除一个键,删除后,键所占用的内存将被释放。需要注意的是,键占用的内存被释放,与该键关联的线程数据所占用的内存并不被释放。因此,线程数据的释放必须在释放键之前完成。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈