多进程间通信方式和多线程同步机制总结

多进程之间通信方式:

文件映射:本地之间

共享内存:本地之间

匿名管道:本地之间

命名管道:跨服务器

邮件槽:一对多的传输数据,通常通过网络向一台Windows机器传输

剪切板:本地之间

socket:跨服务器

多线程之间通信方式:

全局变量

自定义消息响应

多线程之间同步机制:

          临界区:不可以跨进程,忘记解锁会无限等待,要么存在要么没有,多线程访问独占性共享资源

互斥量:可以跨进程,忘记解锁会自动释放,要么存在要么没有

事件:又叫线程触发器,不可以跨进程,要么存在要么没有,一个线程来唤醒另一个线程(包括自动和人工两种方式)

信号量:可以跨进程,始终代表可用资源数量,当资源数为o时,线程阻塞,允许多个线程同时访问一个共享资源

多线程程序:

多线程程序是并发执行,对于多线程的共用资源不能保证能被正确利用即不保证能被独占,并发执行的时候,哪个线程得到运行的机会是随机的也是不可预期。为了解决

多线程中某个线程对资源的独占(也就是多线程同步问题),只允许一个线程拥有共享资源的独占。即多线程之间的同步机制。

线程:

           线程包括两个方面:第一:线程内核对象(OS用来存放统计信息的地方);第二:线程堆栈(函数参数和局部变量)

线程在它的进程的地址空间执行代码。内核对象句柄依赖于进程而存在。

创建线程函数后建议立刻关闭句柄closehandle();

Windows API中提供了建立新的线程的函数CreateThread:

MSDN中CreateThread原型:

HANDLE CreateThread(

LPSECURITY_ATTRIBUTES lpThreadAttributes, //线程安全属性

DWORD dwStackSize, // 堆栈大小

LPTHREAD_START_ROUTINE lpStartAddress, // 线程函数

LPVOID lpParameter, //线程参数

DWORD dwCreationFlags, // 线程创建属性

LPDWORD lpThreadId // 线程ID

);

返回值:

在内核对象中分配一个线程标识/句柄,可供管理,由CreateThread返回

时间: 2024-08-25 00:52:24

多进程间通信方式和多线程同步机制总结的相关文章

Java多线程同步机制

Java的多线程同步机制和其他语言开发的是一样的,在当前线程中,遇到某个事件时,等待另一个线程运行结束或者另一个线程的事件,然后再决定如何处理. 本例来自书上的实例,精简了代码,调整了部分逻辑,使得看起来更加简洁明了.已经运行通过. 代码如下: package SwingExample; import java.awt.BorderLayout; import java.util.Random; import javax.swing.JFrame; import javax.swing.JPro

Linux 多线程同步机制:互斥量、信号量、条件变量

互斥量:互斥量提供对共享资源的保护访问,它的两种状态:lock和unlock,用来保证某段时间内只有一个线程使用共享资源,互斥量的数据类型是pthread_mutex_t主要涉及函数:pthread_mutex_lock() pthread_mutex_trylock() pthread_mutex_unlock()Pthreaf_mutex_init() pthread_mutex_destroy()lock与unlock之间所锁定的区域为临界区域(如果只加锁不解锁程序会阻塞等待)信号量:信号

python多线程同步机制Semaphore

#!/usr/bin/env python # -*- coding: utf-8 -*- """ Python 线程同步机制:Semaphore """ import time import threading import random # 信号量同步基于内部计数器,每调用一次acquire(),计数器减1:每调用一次release(),计数器加1.当计数器为0时,acquire()调用被阻塞. sema = threading.Semaph

多线程同步机制的几种方法

Critical SectionCritical section(临界区)用来实现“排他性占有”.适用范围是单一进程的各线程之间.它是: 一个局部性对象,不是一个核心对象. 快速而有效率. 不能够同时有一个以上的 critical section 被等待. 无法侦测是否已被某个线程放弃. 可以实现线程间互斥,不能用来实现同步. SemaphoreSemaphore 被用来追踪有限的资源.它是:一个核心对象. 没有拥有者. 可以具名,因此可以被其他进程开启. 可以被任何一个线程释放(release

Linux多线程同步机制

http://blog.163.com/he_junwei/blog/static/19793764620141711130253/ http://blog.csdn.net/h_armony/article/details/6766505  一.互斥锁 尽管在Posix Thread中同样可以使用IPC的信号量机制来实现互斥锁mutex功能,但显然semphore的功能过于强大了,在Posix Thread中定义了另外一套专门用于线程同步的mutex函数. 1. 创建和销毁 有两种方法创建互斥

python多线程同步机制condition

#!/usr/bin/env python# -*- coding: utf-8 -*- import threadingimport time def customer(cond): t = threading.currentThread() with cond: # wait()方法创建了一个名为waiter的锁,并且设置锁的状态为locked.这个waiter锁用于线程间的通讯 cond.wait() print '{}: Resource is available to consumer

python多线程同步机制Lock

#!/usr/bin/env python# -*- coding: utf-8 -*- import threadingimport time value = 0lock = threading.Lock() def add(): global value with lock: new_value = value + 1 time.sleep(0.001) value = new_value if __name__ == '__main__': threads = [] for i in ra

多线程同步机制

1, spinlock 适合短暂的等待,不值得休眠的那种短暂. jmp 11b 12: get_lock: lock bts $0, 0x6000 jc get_lock lock incw smp_cpus mov $smp_cpus, %bx lock btr $0, 0x6000 /*release lock*/ mov 0(%bx), %si ... smp_ap_boot_code_end: 这是每个核启动后,根据smp_cpus获取自己的核编号,从而在屏幕上定位不同的"点"

Java多线程的同步机制(synchronized)

一段synchronized的代码被一个线程执行之前,他要先拿到执行这段代码的权限,在 java里边就是拿到某个同步对象的锁(一个对象只有一把锁): 如果这个时候同步对象的锁被其他线程拿走了,他(这个线程)就只能等了(线程阻塞在锁池 等待队列中). 取到锁后,他就开始执行同步代码(被synchronized修饰的代码):线程执行完同步代码后马上就把锁还给同步对象,其他在锁池中 等待的某个线程就可以拿到锁执行同步代码了.这样就保证了同步代码在统一时刻只有一个线程在执行. 众所周知,在Java多线程