在论坛里看到一篇讲线程同步的很好的帖子。http://www.iteye.com/topic/164905
线程同步牢牢记住:1.线程同步就是线程排队。。同步就是排队。线程同步的目的就是避免线程“同步”执行
2“共享”这两个字。只有共享资源的读写访问才需要同步。如果不是共享资源,那么就根本没有同步的必要。
3.只有“变量”才需要同步访问。如果共享的资源是固定不变的,那么就相当于“常量”,线程同时读取常量也不需要同步。至少一个线程修改共享资源,这样的情况下,线程之间就需要同步。
4.多个线程访问共享资源的代码有可能是同一份代码,也有可能是不同的代码;无论是否执行同一份代码,只要这些线程的代码访问同一份可变的共享资源,这些线程之间就需要同步。
为什么需要线程同步?
一个应用程序包含多个线程。每个线程都是独立的,拥有自己的运行栈。 当多个线程同时读写同一份共享资源的时候,可能会引起冲突。这时候,我们需要引入线程“同步”机制,即各位线程之间要有个先来后到,不能一窝蜂挤上去抢作一团。
怎么样线程同步?
同步锁模型:
就是给共享资源上一把锁。
所谓同步,就是几个需要访问同一个共享资源的不同线程竞争同一把锁。
同步锁本身也一定是多个线程之间的共享对象
任何一个Object Reference都可以作为同步锁。我们可以把Object
Reference理解为对象在内存分配系统中的内存地址。因此,要保证同步代码段之间使用的是同一个同步锁,我们就要保证这些同步代码段的
synchronized关键字使用的是同一个Object Reference,同一个内存地址。
同步锁加在什么地方?
把同步锁加在“访问共享资源的代码段”上。而不是共享资源上。
public static final Object lock1 = new Object();
… f1() {
synchronized(lock1){ // lock1 是公用同步锁
// 代码段 A
// 访问共享资源 resource1
// 需要同步
}
同步粒度
线程同步是非常耗费资源的一种操作。我们要尽量控制线程同步的代码段范围。同步的代码段范围越小越好。我们用一个名词“同步粒度”来表示同步代码段的范围。
我们要尽量避免这种直接把synchronized加在函数定义上的偷懒做法。因为我们要控制同步粒度。同步的代码段越小越好。synchronized控制的范围越小越好。
我们不仅要在缩小同步代码段的长度上下功夫,我们同时还要注意细分同步锁。
分享到:
相关推荐
### Linux线程同步知识点详解 #### 一、引言 随着多核处理器的普及和多线程编程技术的发展,多线程程序在现代操作系统中变得越来越常见。在多线程环境中,多个线程可能会访问和修改共享资源,如果没有适当的同步...
"多线程的批量线程同步解决方案"这个标题暗示我们探讨的是如何在多线程环境下有效地管理和同步多个任务,确保数据一致性与程序正确性。下面将详细阐述相关知识点。 一、多线程基础 多线程是指在一个进程中同时执行...
在编程领域,线程同步是多线程编程中的一个核心概念,它确保多个线程在访问共享资源时能正确地协调执行,防止数据竞争和不一致的状态。在C#中,线程同步可以通过多种机制来实现,其中包括信号量(Semaphore)和加锁...
### 多线程同步知识点详解 #### 一、线程基本概念 在计算机科学中,**线程**是操作系统能够进行运算调度的最小单位,它被包含在进程之中,是进程中的实际运作单位。一个单独执行的程序默认包含一个主线程,即程序...
本章节将深入探讨线程同步的基础知识,包括互斥量、条件变量、信号量、死锁以及哲学家就餐问题。 首先,互斥量(Mutex)是一种基本的线程同步机制,用于保护临界区。临界区是指一段代码,其中包含对共享资源的访问...
本文将深入探讨iOS线程管理,特别是线程的创建和线程同步,这些都是开发者需要掌握的基本知识。 首先,我们来理解一下线程的概念。线程是程序执行的最小单位,一个进程可以有多个线程并行执行,这样可以充分利用...
【MFC多线程同步类的使用】 在MFC(Microsoft Foundation Classes)中,多线程编程是一项重要的技术,尤其在开发复杂的、并发执行的任务时。多线程允许程序同时执行多个任务,提升效率和响应速度。然而,线程间的...
线程同步是多线程编程中的关键概念,用于解决并发执行时可能出现的数据竞争问题,确保对共享资源的正确访问和管理。在Java中,线程同步主要通过`synchronized`关键字来实现,防止多个线程同时访问临界区,以避免出现...
本文将深入探讨如何使用JNI实现多线程同步,并通过源码来解析这一过程。 1. **JNI基础知识** JNI为Java程序员提供了一种方式,可以在Java代码中调用本地方法,反之亦然。它定义了一系列的函数,例如`FindClass`...
本示例着重讲解了VC++中的多线程同步,这是多线程编程中确保数据安全和正确性的重要概念。我们将深入探讨临界区、互斥量、事件和信号量这四种多线程同步机制。 1. **临界区(Critical Section)**:临界区是多线程...
线程同步是多线程编程中的一个重要概念,它旨在避免多个线程同时访问同一资源时可能出现的竞争条件。在Python中,我们通常使用`threading`模块来管理线程,并通过`Lock()`对象来实现线程同步。以下是关于线程同步和`...
以上知识是"传智播客_张孝祥_传统线程同步通信技术"课程中可能涵盖的内容。通过学习这些概念和工具,开发者可以更有效地管理多线程环境,创建高效、稳定的并发应用程序。张孝祥老师的课程详细讲解了这些技术的实际...
### 线程同步问题详解 #### 一、Java中的线程同步原理 在多线程编程中,线程同步是解决并发访问共享资源时出现的一致性问题的关键技术之一。Java语言为每个对象提供了一个监视器(Monitor),用于实现线程间的同步...
Java线程同步是Java编程中一个关键的概念,用于解决多线程环境下的数据一致性问题。在Java中,线程同步主要依赖于监视器(Monitor)机制,它支持两种线程行为:互斥和协作。 互斥是通过对象锁来实现的,确保在任意...
多线程注意:wait()方法的调用要有判定条件常用 while () obj.wait(timeout, nanos); ... // Perform action appropriate to condition } synchronized会影响共享数据,但对其他语句的执行不会有规律了!
操作系统中的线程同步和调度是计算机系统中至关重要的概念,特别是在多任务并行处理和并发执行的环境中。本文将深入探讨这两个主题,并结合C++语言的源码来解析其实现。 首先,线程同步是指在多线程环境下,控制多...
操作系统实验 线程同步机制 Nachos 操作系统实验报告中,主要实现了锁机制和条件变量,并利用这些同步机制实现几个基础工具类。下面是该实验报告的详细知识点: 一、锁机制 锁机制是操作系统中最基本的同步机制...
本文将深入探讨Java多线程中的关键知识点,包括创建线程、主线程、线程优先级、线程组、线程同步以及线程间的通信。 1. **创建线程** 在Java中,可以通过两种方式创建线程:继承`Thread`类或实现`Runnable`接口。...