我试图了解一般如何使用信号量。为了维护任务优先级,我选择了互斥锁型信号量而不是二进制。概要是:
我有两个任务,WebTask和DBTask。
WebTask是一个简单的任务,它可以(可以猜测)Web请求并对它们执行某些操作。
DBTask是一个(你得到的)数据库任务,它在消息传递队列类型系统上运行,所以为了使用它,你必须用n个参数向它的队列发送一条消息。
以下是需要解决的问题
WebTask必须等待DBTask
没有信号量,这里发生了什么
显然他们不同步(应该是1,3,4,2)
这只是我试过的一件事,我觉得它会起作用..
这没有改变。
我根本不了解(经过多次尝试)。
(注意:我在VxWorks上)
答案 0 :(得分:0)
如果你必须以同步方式完成任务,那就很容易了。
Web任务在启动时创建信号量。 Web任务获取数据,将其加载到某个请求/响应对象实例中,以及其信号量引用/指针。它将它发送到队列并等待信号量。 DB任务获取对象,读取请求,处理它,加载带有结果的响应字段(或错误消息:),并发信号通知信号量。然后,Web任务将继续运行,并且知道响应可用。
这样,几个Web任务就可以使用DB及其输入队列。
忘记互斥的东西,你不需要任何互斥,(好吧,可能有一个保护数据库输入生产者 - 消费者队列,但可能是内部问题)。
答案 1 :(得分:0)
在WebTask中,在将msg发送到DBTask之后,它在DBTask中等待semephore(semTake),在处理数据库请求和数据格式化之后,它释放一个semephore(semGive)。我认为这应该使你的2个任务同步。