并发并行

https://www.v2ex.com/t/371095

https://cloud.tencent.com/developer/news/257034

https://blog.csdn.net/jeffasd/article/details/51025618

https://www.cnblogs.com/kubixuesheng/p/4355786.html

除非你的单核并发是不允许抢占式的,否则一样会产生线程不安全
举个简单的例子,程序 1 执行 i++,程序 2 也执行 i++
当程序 1 将 i 值读取出来并运算后改为写入的时候,系统抢占式把控制权给个程序 2,程序 2 完整的执行完了 i++,随后系统将控制权交回给程序 1,此时的程序 1 并不知道自己被打断了,也不知道 i 已经被修改,还把之前计算好的值写入,最后结果就是 i 只加了 1,而不是加了2

比如电子商城购买虚拟物品,同时扣款的例子,就是那个 i++的实际案例

 

而且两个进程直接会产生线程不安全的情况并不是只有同时读写同一块内存区域这一种,如果同时读写同一个 FILE,或者同时读写同一个 MMAP 分配的空间,同时读写一个共享的 socket 都可以造成线程不安全,以及父进程和子进程同时读写同一个打开的句柄或者管道

 

  • 异步:不需要等待阻塞任务的结果,继续执行
  • 同步:等待阻塞任务的结果,完成之后才能继续执行
  • 并发:在一个时间间隔内,每个进程都得到了运行
  • 并行:两个进程同时在运行
  • 阻塞:阻塞调用是指调用结果返回之前,当前线程会被挂起。函数只有在得到结果之后才会返回
  • 互斥:进程间相互排斥的使用临界资源的现象,就叫互斥
posted @ 2019-07-01 12:00  zbjice  阅读(169)  评论(0)    收藏  举报