
多线程
文章平均质量分 88
多线程
执假以为真
Learning, Coding, Writing
展开
-
lock-free编程系列
lock-free编程,讲究的是高效率,因此不能再使用锁,而是使用原子性操作。而原子性操作的实现,可能有多种方式,比如,原创 2021-03-11 23:20:19 · 388 阅读 · 0 评论 -
简介 Tagged Pointer (标记指针)
在计算机科学中,Tagged Pointer 是一个指针(内存地址),它具有与其关联的附加数据,例如,indirection bit 或 引用计数。这些附加数据通常是“折叠”在指针中,意思就是,利用内存寻址的某些属性存储在表示内存地址的数据中。该名称来自 “tagged architecture” system,该系统在硬件级别保留位以指示每个单词的含义。附加数据被称为“标签”,尽管严格说来,“标签”是指数据类型,而不是数据; 但是,“tagged pointer”的用法无处不在。将tag折叠进指针原创 2021-03-11 23:11:09 · 1797 阅读 · 0 评论 -
简介ABA问题
在多线程计算中,在同步期间会发生ABA问题,当一个位置被读取两次,两次读取具有相同的值,并且“值相同”用于指示“什么都没有改变”时。但是,另一个线程可以在两次读取之间执行并更改值,执行其他工作,然后将值改回,因此,即使第二个线程的工作违反了该假设,也使第一个线程认为“什么都没有改变”。当多个线程(或进程)访问共享数据时,会发生ABA问题。以下是将导致ABA问题的事件序列:进程 P1 从共享内存中读取值 A,进程 P1 被抢占,从而允许进程 P2 运行,进程 P2 在抢占之前将共享内存值 A 修改原创 2021-03-11 23:05:50 · 1233 阅读 · 0 评论 -
简介CAS(比较并交换)- lock-free编程的基石之一
概览在计算机科学中,比较交换(CAS)是用于多线程以实现同步的原子指令。 它将存储位置的内容与给定值进行比较,并且只有它们相同时,才将该存储位置的内容修改为新的给定值。 这是作为单个原子操作完成的。原子性保证了根据最新信息计算出新值; 如果与此同时值已由另一个线程更新,则写入将失败。 操作的结果必须表明它是否执行了替换; 这可以通过简单的布尔响应(此变量通常称为“比较设置”),也可以通过返回从内存位置读取的值(而不是写入该值)来完成。比较和交换操作是以下伪代码的原子版本:// 以下函数视为一个原子操原创 2021-03-11 22:58:37 · 769 阅读 · 0 评论 -
可重入和线程安全
线程安全如果一个函数在同一时刻可以被多个线程调用而最终结果正确,就称该函数是线程安全的。线程安全问题都是由共享的资源,如全局变量、静态变量、IO等引起的。一个函数如果不需要访问共享资源,那么为调用该函数的每个线程提供数据副本即可,该函数是线程安全的一个函数如果访问的是只读的共享资源,那么该函数是线程安全的;一个函数如果访问的是非只读的共享资源,那么需要利用互斥锁等提供线程同步,以确保程序以确定的方...原创 2016-02-09 12:43:30 · 645 阅读 · 0 评论 -
线程的结合与分离
原文:http://www.cnblogs.com/mydomain/archive/2011/08/14/2138454.htm线程的分离与结合在任何一个时间点上,线程是可结合的(joinable),或者是分离的(detached)。一个可结合的线程能够被其他线程收回其资源和杀死;在被其他线程回收之前,它的存储器资源(如栈)是不释放的。相反,一个分离的线程是不能被其他线程回收或杀死的,它的存储...转载 2016-03-08 22:02:20 · 822 阅读 · 0 评论 -
关于线程的一些概念和关于线程返回值的简单示例代码
整理了一篇网上的文章,润饰之处比较多。出处已不详。关于返回值的部分,本来看看文档也能知道。不过既然整理了,也就发出来吧。转载 2016-03-08 23:50:26 · 713 阅读 · 0 评论