互斥锁

一篇文章让你了解MySQL

断了今生、忘了曾经 提交于 2019-12-01 04:51:16
一篇文章带你读懂MySQL MySQL的官方文档 作为一名开发人员来说,数据库知识是必不可少的,博主曾经年少无知的时候因为不了解数据库而被京东拒之门;无论是基于文件的Sqlite,还是工程上使用很多的MySQL、PostgreSQL/SQL Server;但是都没有对数据库有一个清晰的体系认识,所以拿出一段时间来研究数据库,希望对看到这篇文章的各位能有所帮助; MySQL是一个跨平台的开源关系型数据库,目前MySQL已经被广泛的运用到中小型的网站项目中去,由于其体积小,成本低,速度快这些特点,尤其是开放源码这一特点,许多中小型网站为了降低网站总体拥有成本而选择了MySQL作为网站数据库。随着MySQL在互联网上被广泛使用,在数据库领域的地位爆炸式的提升,大量的使用MySQL作为公司业务的数据库; MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,目前属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS (Relational Database Management System,关系数据库管理系统) 应用软件。 MySQL是一种 关系数据库管理系统 ,关系数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。 MySQL所使用的 SQL

(转)Python多任务之线程

穿精又带淫゛_ 提交于 2019-12-01 02:08:34
https://www.cnblogs.com/yifchan/p/python-1-41.html 多任务介绍 我们先来看一下没有多任务的程序 import time def sing(): for i in range(5): print("我喜欢唱") time.sleep(1) def dance(): for i in range(5): print("我喜欢跳") time.sleep(1) def main(): sing() dance() pass if __name__ == "__main__": main() 运行结果:花了十秒钟多,只能按顺序执行,无法一起/同步执行 我喜欢唱 我喜欢唱 我喜欢唱 我喜欢唱 我喜欢唱 我喜欢跳 我喜欢跳 我喜欢跳 我喜欢跳 我喜欢跳 我们再来看一下使用了多线程的程序 import time import threading def sing(): for i in range(5): print("我喜欢唱歌") time.sleep(1) def dance(): for i in range(5): print("我喜欢跳舞") time.sleep(1) def main(): t1 = threading.Thread(target=sing) t2 = threading.Thread(target=dance)

同步之sync.Mutex互斥锁

北战南征 提交于 2019-11-30 17:48:03
同步之sync.Mutex互斥锁 sync包中定义了Locker结构来代表锁。 type Locker interface { Lock() Unlock() } 并且定义了两个结构来实现Locker接口:Mutex 和 RWMutex。 我们可以用一个容量只有1的channel来保证最多只有一个goroutine在同一时刻访问一个共享变量。一个只能为1和0的信号量叫做二元信号量(binary semaphore)。使用二元信号量实现互斥锁,示例如下, var ( // 一个二元信号量 // 缓存为 1 的channel sema = make(chan struct{}, 1) // a binary semaphore guarding balance balance int ) func Deposit(amount int) { // 存钱的时候需要获取一个信号量,以此来保护变量 balance sema <- struct{}{} // acquire token balance = balance + amount <-sema // release token } func Balance() int { sema <- struct{}{} // acquire token b := balance <-sema // release token return b

多线程的同步与互斥(互斥锁、条件变量、读写锁、自旋锁、信号量)

天大地大妈咪最大 提交于 2019-11-30 13:23:52
多线程的同步与互斥(互斥锁、条件变量、读写锁、自旋锁、信号量) 版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 本文链接: https://blog.csdn.net/daaikuaichuan/article/details/82950711 文章目录 一、同步与互斥的概念 二、互斥锁(同步) 三、条件变量(同步) 1、线程的条件变量实例1 2、线程的条件变量实例2 3、虚假唤醒(spurious wakeup) 四、读写锁(同步) 五、自旋锁(同步) 六、信号量(同步与互斥) 一、同步与互斥的概念    现代操作系统基本都是多任务操作系统,即同时有大量可调度实体在运行。在多任务操作系统中,同时运行的多个任务可能: 都需要 访问/使用同一种资源 ; 多个任务之间有依赖关系,某个任务的运行 依赖 于另一个任务。 【同步】:    是指散步在不同任务之间的若干程序片断,它们的运行必须严格按照规定的某种先后次序来运行,这种先后次序依赖于要完成的特定的任务。最基本的场景就是: 两个或两个以上的进程或线程在运行过程中协同步调,按预定的先后次序运行。比如 A 任务的运行依赖于 B 任务产生的数据。 【互斥】:    是指散步在不同任务之间的若干程序片断,当某个任务运行其中一个程序片段时,其它任务就不能运行它们之中的任一程序片段

网络编程之多线程——GIL全局解释器锁

a 夏天 提交于 2019-11-30 12:55:43
网络编程之多线程——GIL全局解释器锁 一、引子 定义: In CPython, the global interpreter lock, or GIL, is a mutex that prevents multiple native threads from executing Python bytecodes at once. This lock is necessary mainly because CPython’s memory management is not thread-safe. (However, since the GIL exists, other features have grown to depend on the guarantees that it enforces.) 结论:在Cpython解释器中,同一个进程下开启的多线程,同一时刻只能有一个线程执行,无法利用多核优势 首先需要明确的一点是GIL并不是Python的特性,它是在实现Python解析器(CPython)时所引入的一个概念。就好比C++是一套语言(语法)标准,但是可以用不同的编译器来编译成可执行代码。有名的编译器例如GCC,INTEL C++,Visual C++等。Python也一样,同样一段代码可以通过CPython,PyPy,Psyco等不同的Python执行环境来执行

浪尽此生 提交于 2019-11-30 08:18:48
锁 Lock(线程锁)(互斥锁) from threading import Thread x=0 def foo(): global x for i in range(10000000): if i%1000 ==0: print(x) x+=1 t_l = [] for i in range(2): t = Thread(target=foo) t.start() t_l.append(t) for i in t_l: i.join() print(x) 对可能发生数据安全的地方进行上锁 上锁外的地方还是并发的, 但上锁的代码就变成了串行 保证了数据安全 死锁 from threading import Thread,Lock, current_thread import time lo = Lock() lc = Lock() def func1(): lo.acquire() print(current_thread().name, "抢到了锁1") lc.acquire() print(current_thread().name, "抢到了锁2") lc.release() print(current_thread().name, "释放了锁2") lo.release() print(current_thread().name, "释放了锁1") def func2()

python高级串写

旧街凉风 提交于 2019-11-30 03:24:18
TCP和UDP的区别: UDB:是面向无连接的通信协议,包含目标端口号和源端口号 优点:传输速度快 缺点:传输给对方不需要建立连接,对方收到文件没有确认信号,发送端不知数据是否接收。不能从新发送数据,不可靠。 TCP:是面向字节流可靠的传输通信协议,三次握手后建立连接,传输后完成四次挥手 优点:TCP有窗口、确认、重传、阻塞等机制,保证了数据的确认性 缺点:传输速度要比UDP慢 什么是三次挥手四次握手 三次握手: 1.客户端向服务端发送一个带有SYN标志,随机生成序号为100的报文 2.服务端收到这个请求,并发送SYN200、ACK1001的报文给客户端 3.客户端收到请求,再向服务端发送一个SYN200的报文给客户端 四次挥手:因为TCP连接是双向通信(全双工),需要每个方向都单独关闭通信连接 1.客户端向服务端发送一个fin的报文,请求关闭客户端通信 2.服务端收到这个请求,回复一个ACK报文并答应关闭 3.服务端向客户端发送一个fin报文,请求关闭服务端通信 4.客户端收到这个请求,回复一个ACK报文并答应关闭 同步和异步 同步:是指多个任务同时运行 异步:是指多个任务在执行的时候没有先后顺序 并行和并发 并行:同一时刻内多个任务同时运行 并发:同一时间间隔内多个任务同时运行,但不会同一时间运行,有交替顺序 阻塞和非阻塞 阻塞:就是卡住了调用者,不能继续往下执行 非阻塞

『浅入浅出』MySQL 和 InnoDB

不想你离开。 提交于 2019-11-30 03:16:13
本人免费整理了Java高级资料,涵盖了Java、Redis、MongoDB、MySQL、Zookeeper、Spring Cloud、Dubbo高并发分布式等教程,一共30G,需要自己领取。传送门: https://mp.weixin.qq.com/s/JzddfH-7yNudmkjT0IRL8Q 作为一名开发人员,在日常的工作中会难以避免地接触到数据库,无论是基于文件的 sqlite 还是工程上使用非常广泛的 MySQL、PostgreSQL,但是一直以来也没有对数据库有一个非常清晰并且成体系的认知,所以最近两个月的时间看了几本数据库相关的书籍并且阅读了 MySQL 的官方文档,希望对各位了解数据库的、不了解数据库的有所帮助。 本文中对于数据库的介绍以及研究都是在 MySQL 上进行的,如果涉及到了其他数据库的内容或者实现会在文中单独指出。 数据库的定义 很多开发者在最开始时其实都对数据库有一个比较模糊的认识,觉得数据库就是一堆数据的集合,但是实际却比这复杂的多,数据库领域中有两个词非常容易混淆,也就是 数据库 和 实例 : 数据库:物理操作文件系统或其他形式文件类型的集合; 实例:MySQL 数据库由后台线程以及一个共享内存区组成; 对于数据库和实例的定义都来自于 MySQL 技术内幕:InnoDB 存储引擎 一书,想要了解 InnoDB 存储引擎的读者可以阅读这本书籍。

Linux系统编程_课时83+84_读写锁的特性+使用场景

久未见 提交于 2019-11-29 17:16:31
课时83+84_读写锁的特性+使用场景 文章目录 课时83+84_读写锁的特性+使用场景 1、读写锁的特性 1、读写锁是几把锁 2、读写锁的类型 3、读写锁的特性 2、读写锁的使用场景 2.1、线程A加写锁成功,线程B请求读锁 2.2、线程A持有读锁,线程B请求写锁 2.3、线程A持有读锁,线程B请求读锁 2.4、线程A持有读锁,然后线程B请求写锁,然后线程C请求读锁 2.5、线程A持有写锁,然后线程B请求读锁,然后线程C请求写锁 3、互斥锁、读写锁的选择 1、读写锁的特性 1、读写锁是几把锁 读写锁只有一把锁,有读属性和写属性。 pthread_rwlock_t lock ; 2、读写锁的类型 (1)读锁:对内存做读操作 (2)写锁:对内存做写操作 3、读写锁的特性 (1)线程A加 读锁 成功,又来了三个线程,做 读 操作,可以 加锁成功 。 读共享---并行处理 (2)线程A加 写锁 成功,又来了三个线程,做 读 操作,三个线程 阻塞 。 写独占---串行处理 (3)线程A加 读锁 成功,又来了B线程加 写锁 阻塞,又来了C线程加 读锁阻塞 。 读写不能同时 写的优先级高 线程A解锁后,线程B处理,线程B解锁后,线程C处理。 2、读写锁的使用场景 2.1、线程A加写锁成功,线程B请求读锁 线程B阻塞 :读写不能同时 2.2、线程A持有读锁,线程B请求写锁 线程B阻塞

互斥锁之模拟抢票

不打扰是莪最后的温柔 提交于 2019-11-29 13:52:36
import time, jsonfrom multiprocessing import Process, Lock # 互斥锁def serch(name): time.sleep(1) dic = json.load(open('db.txt', 'r', encoding='utf-8')) print('%s查看到剩余票数是%s'%(name, dic['count']))def get(name): dic = json.load(open('db.txt', 'r', encoding='utf-8')) if dic['count'] > 0: dic['count'] -= 1 time.sleep(3) json.dump(dic, open('db.txt', 'w', encoding='utf-8')) print('%s抢票成功!'%name)def task(name, mutex): serch(name) mutex.acquire() #开启互斥锁 get(name) mutex.release() #关闭互斥锁if __name__ == '__main__': mutex = Lock() #互斥锁实例化 for i in range(10): p = Process(target=task, args=('路人%s'%i, mutex))