2017-10-09 74 views
0

我有一个场景,其中一个函数(代码块)被n个不同的回调函数访问。如果同时有多个回调调用该函数,则必须在该函数中放置一个互斥锁,以便一次只有一个回调函数可以访问该回调函数,而另一个回调函数必须等待至临界区中的第一个回调函数。 这是正确的设计?有其他设计吗?当第一个回调得到处理时,有没有办法让第二个回调等待?同一代码块在同一时间被不同的回调访问

+2

此类函数称为重入函数,如果它使用所有局部变量或实例变量,它们将执行正常。需要同步使用共享/全局变量的函数或其部分 –

回答

1

取决于该功能。

它修改共享内存吗?
它是否使用其他展示竞态条件的函数?

如果答案是肯定的,那么您必须应用锁定和同步过程。
从开始到结束使用该锁定将毫无意义。只有在临界区之前和之后才应用锁(即共享数据更新(写入)的代码段)