有时在打开一个西门子S7-300/400程序,在SIMATIC管理介面左边项目树窗口中点块后,在右边的薯兆漏窗口中将显示各种块,有时会发现全部块或部分块带有一把小锁,要打开这些带小锁的块是打不开的,这时需要用“西门子PLCS7-300/400加锁/解锁程序”来解锁。
解锁方法:1、打开“西门子PLCS7-300/400加锁/解锁程序”;2、在“西门子PLCS7-300/400加锁/解锁程序”介面中,按“浏览”按钮,选择需要解锁的S7-300/400程序;3、按“打开”按钮,在名称栏下将显示程序中各类型块的数量;4、在名称栏下点程数烂猜猛序名,在块栏下将显示各块是否在锁定状态,即显示“是”或“否”;5、在显示栏下选择需要解锁的块类型;6、根据需要,在“选定的块”或“所有的块”下按“解锁”按钮,就完成解锁;7、重新打开S7-300/400程序,就会发现原先块上带小锁的就不带小锁了,表示已解锁。
这个睁贺可答早模以模拟那种拨码形式的清缓密码锁方式来设计,比如OFO共享单车的拨码方式。#include<reg51.h>
#define uchar unsigned char
uchar mima[4]={1,2,3,4}
uchar keymm[4]={0,0,0,0}
sbit key1=P1^0
sbit key2=P1^1
sbit key3=P1^2
sbit key4=P1^3
sbit led=P1^4
bit flag=0
void delay(uchar a)
{
uchar i
while(a--)for(i=0i<120i++)
}
main()
{
uchar i
led=1
while(1)
{
if(key1==0)
{
while(key1==0)
keymm[0]++
keymm[0]%=10
}
if(key2==0)
{
while(key2==0)
keymm[1]++
keymm[1]%=10
}
if(key3==0)
{
while(key3==0)
keymm[2]++
keymm[2]%=10
}
if(key4==0)
{
while(key4==0)
keymm[3]++
keymm[3]%=10
}
for(i=0i<4i++)
{
if(keymm[i]!=mima[i])break
if(i==3)flag=1
}
if(flag)
{
i=10
while(i--)
{
led=~led
delay(100)
}
flag=0
}
}
}
大致罗列一下:一、全局解释器锁(GIL)
1、什么是全局解释器锁
每个CPU在同一时间只能执行一个线程,那么其他的线程就必须等待该线程的全局解释器,使用权消失后才能使用全局解释器,即使多个线程直接不会相互影响在同一个进程下也只有一个线程使用cpu,这样的机制称为全局解释器锁(GIL)。GIL的设计简化了CPython的实现,使的对象模型包括关键的内建类型,如:字典等,都是隐含的,可以并发访问的,锁住全局解释器使得比较容易的实现对多线程的支持,但也损失了多处理器主机的并行计算能力。
2、全局解释器锁的好处
1)、避免了大量的加锁解锁的好处
2)、使数据更加安全,解决多线程间的数据完整性和状态同步
3、全局解释器的缺点
多核处理器退化成单核处理器,只能并发不能并行。
4、GIL的作用:
多线程情况下必须存在资源的竞争,GIL是为了保证在解释器级别的线程唯一使用共享资源(cpu)。
二、同步锁
1、什么是同步锁?
同一时刻的一个进程下的一个线程只能使用一个丛昌cpu,要确保这个线程下的程序在一段时间内被cpu执,那么就要用到同步锁。
2、为什么用同步锁?
因为有可能当一个线程在使用cpu时,该线程下的程序可能会遇到io *** 作,那么cpu就会切到别渗锋扒的线程上去,这样就有可能会影响到该程序结果的完整性。
3、怎么使用同步锁?
只需要在对公共数据的 *** 作前后加上上锁和释放锁的 *** 作即可。
4、同步锁的所用:
为了保证解释器级别下的自己编写的程序唯一使用共享资源产生了同步锁。
三、死锁
1、什么是死锁?
指两个或两个以上的线程或进程在执行程序的过程中,因争夺资源或者程序推进顺序不当而相互等待的一个现象。
2、死锁产生的必要条件?
互斥条件、请求和保持条件、不剥夺条件、环路等待条件
3、处理死锁的基本方法?
预防死锁、避免死锁(银行家算法)、检测死锁(资源分配)、解除死锁:剥夺资源、撤销进程
四、递归锁
在Python中为了支持同一个线程中多次请求同一资源,Python提供了可重入锁。这个RLock内部维护着一个Lock和一个counter变量,counter记录了acquire的次数,从而使得资源可以被多次require。直到一个线程所有的acquire都被release,其他的线程才能获得资源。递归锁分为可递归锁与非递归锁。
五、乐观锁
假设不会发生并发冲突,只在提交 *** 作时检查是否违反数据完整性。
六、悲观锁
假定会发生并发冲突,屏蔽一切可能违反数据完整性的 *** 作。
python常用的加锁方式:互斥锁、可重入锁、迭代死锁、互相调用死锁、自旋锁大致罗列一下:
一、全局解释器锁(GIL)
1、什么是全局解释器锁
每个CPU在同一时间只能执行一个线程,那么其他的线程就必须等待该线程的全局解释器,使用权消失后才能使用全局解释器,即使多个线程直接不会相互影响在同一个进程下也只有一个线程使用cpu,这样的机制称为全局解释器锁(GIL)。GIL的设计简化了CPython的实现,使的对象模型包括关键的内建类型,如:字典等,都是隐含的,可以并发访问的,锁住全局解释器使得比较容易的实现对多线程的支持,但也损失了多处理器主机的并行计算能力。
2、全局解释器锁的好处
1)、避免了大量的加锁解锁的好处
2)、使数据更加安全,解决多线程间的数据完整性和状态同步
3、全局解释器的缺点
多核处理器退化成单核处理器,只能并发不能并行。
4、GIL的作用:
多线程情况下必须存在资源的竞争,GIL是为了保证在解释器级别的线程唯基盯一使用共享资源(cpu)。
二、同步锁
1、什么是同步锁?
同一时刻的一个进程下的一个线程只能使用一个cpu,要确保这个线程下的程序在一段时间内被cpu执,那么就要用到同步锁。
2、为什么用同步锁?
因为有可能当一个线程在使用cpu时,该线程下的程序可能会遇到io *** 作,那么cpu就会切到别的线程上去,这样就有可能会影响到该程序结果的完整性。
3、怎么使用同步锁?
只需要在对公共数据的 *** 作前后加上上锁和释放锁的 *** 作即可。
4、同步锁的所用:
为了保证解释器级别下的自己编写的程序唯一使用共享资源产生了同步锁。
三、死锁
1、什么是死锁?
指两个或两个以上的线程或进程在执行程序的过程中,因争夺资源或者程序推进顺序不当而相互等待的一个现象。
2、死锁产生的必要条件?
互斥条件、请求和保持条件、不剥夺条件、环路等待条件
3、处理死锁的基本方法?
预防死锁、避免死锁(银行家算法)、检测死锁(资源分配)、解除死锁:剥夺资源、撤销进程
四、递归锁
在Python中为了支持同一个线程中多次请求同一资源,Python提供了可重入锁。这个RLock内部维护着一个Lock和一个counter变量,counter记录了acquire的次数,从而使得资源可以被多次require。直到一个线程所有的acquire都被release,其他的线程才能获得资源。递归锁分为可递归锁与非递归锁。
五、乐观锁
假设不会发生并发冲突,只在提交 *** 作时检查是否违反数据完整性。
六、悲观锁
假定会发生并发冲突,屏蔽一切可能违反数据完整性的 *** 作。
python常用的加锁方式:互斥锁、可重入锁、迭代死锁、互相调用死锁、自旋锁
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)