易语言模块API视频教程线程创建许可证(InitializeCriticalSection)

1、许可证的添加一般是子程序变量或者是全局变量
2、一般用许可证是在多个线程要同时写一个集变量或全局变量才使用,同时读不需要!
3、用多了许可证等于失去了多线程优势,还不如不用!
4、操作量较大的话,一定要用许可证,因为怕有些数据在处理的过程中出现混乱的现象(操作网页的时候就会出现乱码)!
5、那么许可证在那个地方创建,那个地方删除?在程序中启动多线程之前先创建一个许可证,并设置为全局变量,退出程序之前删除许可证!创建和删除是对应的。
6、每个线程使用许可证对公共数据操作完后需立马退出许可区,不然其它线程如果也是访问这个数据,那么就处于等待状态,那就成了单线程了。
7、多线程许可证适用范围:对程序集变量,全局变量,部分组件的读写需要使用许可证进入后方能使用。
8、某些个组件,加了许可证,也不见的能长时间稳定!
9、计算机对于线程的执行是抢占式策略,谁能抢到谁先执行,2个线程操作 不同的子程序 而且又用2个许可证 和没用许可证是一样的!!!

511遇见

================================================
多线程 许可证相关知识
----------------------------------------------
1、(1)临界资源是指每次仅允许一个进程访问的共享资源。

(2)属于临界资源的硬件有打印机、磁带机等,软件有消息缓冲队列、变量、数组、缓冲区等。 多进程间应采取互斥方式,实现对这种资源的共享。

(3)必须保证多进程互斥地进入自己的临界区,便可实现诸进程对临界资源的互斥访问

(4)临界区内放的一般是被1个以上的进程共用的数据。

(5)属于临界资源的硬件有打印机、磁带机等,软件有消息缓冲队列、变量、数组、缓冲区等。 诸进程间应采取互斥方式,实现对这种资源的共享。

2、每个进程中访问临界资源的那段代码称为临界区。每次只准许一个进程进入临界区,进入后不允许其他进程进入。

3、进程进入临界区的调度原则是:

①如果有若干进程要求进入空闲的临界区,一次仅允许一个进程进入。

②任何时候,处于临界区内的进程不可多于一个。如已有进程进入自己的临界区,则其它所有试图进入临界区的进程必须等待

③进入临界区的进程要在有限时间内退出,以便其它进程能及时进入自己的临界区。

④如果进程不能进入自己的临界区,则应让出CPU,避免进程出现“忙等”现象。

API

.版本 2

.DLL命令 InitializeCriticalSection, , "kernel32", "InitializeCriticalSection", 公开, 线程_创建许可证 初始化临界资源对象
.参数 lpCriticalSection, 线程许可证, 传址, 类型是自定义数据类型,线程许可证就是参数临界资源对象指针

自定义数据类型

.版本 2

.数据类型 线程许可证, 公开
.成员 DebugInfo, 整数型, , , 调试信息
.成员 LockCount, 整数型, , , 锁定计数
.成员 RecursionCount, 整数型, , , 递归计数
.成员 OwningThread, 整数型, , , 拥有线程
.成员 LockSemaphore, 整数型, , , 锁定信号量
.成员 SpinCount, 整数型, , , 自旋计数

模块源码

.版本 2

.子程序 线程_创建许可证, 线程许可证, 公开, 创建成功返回一个进入许可证的数值,这个数值可以保证进入指定程序中的代码区,避免多线程冲突
.局部变量 进入许可证, 线程许可证

InitializeCriticalSection (进入许可证)
加入成员 (集_许可证数组, 进入许可证)
返回 (进入许可证)


发布日期:

所属分类: 易语言 标签: