【操作系统知识】线程间通信

9. 线程间通信

(1) 互斥锁

互斥锁为资源引入一个状态:锁定/非锁定。某个线程要更改共享数据时,先将其锁定,此时资源的状态为“锁定”,其他线程不能更改;直到该线程释放资源,将资源的状态变成“非锁定”,其他的线程才能再次锁定该资源。互斥锁保证了每次只有一个线程进行写入操作,从而保证了多线程情况下数据的正确性。

"""
#创建锁
mutex = threading.Lock()
#锁定
mutex.acquire([timeout])
#释放
mutex.release()
"""
import threading

money = 0

def order(n):
    global money
    money = money + n
    money = money - n

class MyThread(threading.Thread):
    def __init__(self, thread_name):
        threading.Thread.__init__(self, name='线程' + thread_name)
        self.thread_name = int(thread_name)

    def run(self):
        for i in range(1000000):
            lock.acquire()  # 加锁
            order(self.thread_name)
            lock.release()  # 释放

if __name__ == '__main__':
    lock = threading.Lock()
    t1 = MyThread('1')
    t2 = MyThread('10')
    t1.start()
    t2.start()
    t1.join()
    t2.join()
    print(money)

# 结果
'''
0
'''

为了支持在同一线程中多次请求同一资源,python提供了“可重入锁”:threading.RLock。RLock内部维护着一个Lock和一个counter变量,counter记录了acquire的次数,从而使得资源可以被多次acquire。直到一个线程所有的acquire都被release,其他的线程才能获得资源。acquire() 和 release() 必须成对出现,也就是说加了几把锁就得释放几把锁。

import threading
import time

num = 0
mutex = threading.RLock()

class MyThread(threading.Thread):
    def run(self
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
进程和线程操作系统中的两个重要概念,用于管理和执行程序的执行。 1. 进程(Process): - 进程是计算机中正在运行的程序的实例。它由程序、数据集合、执行状态等组成。 - 每个进程都有自己的地址空和系统资源,如打开的文件、网络连接等。 - 进程是独立运行的,拥有自己的执行流程,可以并行执行。 - 进程之通过进程通信(IPC)机制进行交互,如管道、共享内存、消息队列等。 2. 线程(Thread): - 线程是进程中的一个执行单元,一个进程可以包含多个线程。 - 线程共享进程的资源,如地址空、文件描述符等。 - 线程可以并发执行,共享进程的上下文和数据。 - 线程可以通过共享内存等机制进行通信。 进程和线程的区别: 1. 资源开销:创建和撤销进程的开销较大,包括分配内存空、建立上下文等;而创建和撤销线程的开销较小,因为它们共享进程的资源。 2. 独立性:进程是独立运行的实体,互相之不会影响;而线程是在进程内部的执行流,共享进程的资源,彼此之有较强的依赖关系。 3. 切换速度:由于线程共享进程的上下文,线程的切换速度较快;而进程切换需要保存和恢复更多的上下文信息,速度较慢。 4. 通信和同步:进程通信需要额外的机制,如管道、消息队列等;而线程可以直接共享内存,更容易进行通信和同步。 进程和线程的使用场景: - 进程适合用于独立运行、互不干扰的任务,如操作系统中的各个应用程序。 - 线程适合用于执行共享资源、并发执行的任务,如多线程的网络服务器、图形界面程序等。 总结:进程和线程操作系统中用于管理和执行程序的重要概念。进程是程序的实例,拥有独立的资源和执行流程,通过进程通信进行交互。线程是进程中的执行单元,共享进程的资源,可以并发执行,通过共享内存等机制进行通信。进程和线程各有优势和适用场景,根据具体需求选择合适的方式。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值