Java教程

sv7.5semphore

本文主要是介绍sv7.5semphore,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

资料来源

(1)sv绿皮书;

(2)硅芯思见:【127】semaphore原来还有这一面 (qq.com)

1.旗语semphore简介

(1)semaphore是SystemVerilog中的内建类,主要用于实现多进程对于共享资源的协同访问控制。

(2)semaphore的基本操作:new(),get(),put(),try_get()。

(3)semaphore示例

2.semaphore基本操作的特殊用法

2.1new

(1) semaphore_name=new(number_of_keys);其中,number_of_keys是创建semaphore存储桶中包含的初始key的数目,可以不指定,默认值为0,说明此时声明的semaphore句柄指向的存储空间中没有key可用,但并不意味着此时没有为semaphore句柄分配空间;

(2) 使用示例

2.2get()

(1) semaphore.get(number_of_keys)或semaphore_name.get();如果没有指定number_of_keys,那么get()方法默认需要获取的key数目为1。

(2) 如果在get时,存储桶里有足够多的key可供获取,那么方法将返回并且程序继续执行;

(3) 如果在get时,存储桶里没有足够多的key可供获取,那么进程将被阻塞;

(4) 如果在get时,存储桶里没有存放满足get()要求数目的key,那么进程也不会被阻塞,而是会认为该任务不能完成并提前结束;所以,在使用semaphore的get()任务时,需要保证semaphore中存放了满足get()要求数目的key;

(5) 与(4)对应的示例:

2.3put()

(1) semaphore_name.put(number_of_keys)或semaphore_name.put();

(2) 当put被调用时,会返回给存储桶指定数目的key;如果方法调用时,不指定key的数目,默认返回1个key;

(3) put返回存储桶的key的数目可以比其get到的key的数目多;

(4) 与(3)对应的示例:

(5) 在没有使用get(key_number)的情况下,也可以使用put向存储桶返回特定数目的key;

(6) 如果semaphore在创建对象时,不指定初始化key的数目,可以在后续使用过程中通过put方法向semaphore存储桶中放入key从而间接实现存储桶key的初始化;

2.4try_get()

(1) semaphore_name.try_get(number_of_keys)或semaphore_name.try_get();

(2) try_get函数与get任务的不同点在于:get()方法会阻塞其后程序的执行并且在获取不到期望数目的key时会提前退出当前进程,而try_get()函数如果semaphore存储桶中有足够的key,则会获取到对应数目的key,并返回1,程序继续执行,当获取不到期望数目的key时,try_get()函数会返回0,并且不会阻塞进程的继续执行;

这篇关于sv7.5semphore的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!