Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Multithreading NPAPI线程模型:对全局变量的访问应该受到锁的保护吗?_Multithreading_Npapi - Fatal编程技术网

Multithreading NPAPI线程模型:对全局变量的访问应该受到锁的保护吗?

Multithreading NPAPI线程模型:对全局变量的访问应该受到锁的保护吗?,multithreading,npapi,Multithreading,Npapi,发件人: 此API不是为线程安全而设计的。此API的线程模型是这样的:通过此API的所有调用都是同步的,从插件到此API中方法的调用必须来自启动插件的线程,同样,浏览器对此API中方法的所有调用都保证来自同一线程。此API的未来版本可能会提供一种机制,用于将调用从一个线程代理到另一个线程,以帮助从其他线程使用此API 如果我想访问插件中的全局变量(在所有实例之间共享,甚至在不同的页面上),我是否需要锁定它,或者浏览器是否只使用一个线程与所有实例的插件通信 浏览器始终使用一个线程与所有实例的插件通

发件人:

此API不是为线程安全而设计的。此API的线程模型是这样的:通过此API的所有调用都是同步的,从插件到此API中方法的调用必须来自启动插件的线程,同样,浏览器对此API中方法的所有调用都保证来自同一线程。此API的未来版本可能会提供一种机制,用于将调用从一个线程代理到另一个线程,以帮助从其他线程使用此API


如果我想访问插件中的全局变量(在所有实例之间共享,甚至在不同的页面上),我是否需要锁定它,或者浏览器是否只使用一个线程与所有实例的插件通信

浏览器始终使用一个线程与所有实例的插件通信;作为回报,您也应该这样做,并且不要从主线程以外的其他线程调用任何NPN_uu函数


请记住,如果您正在做任何可能会阻塞主线程的事情,您将需要创建自己的线程,在这种情况下,您可能需要锁定;然而,仅仅是为了浏览器?不,你不需要它们。

好的。关于阻塞,如果我使用NPN_Get/postrl进行I/O,浏览器会在同一线程上调用NPP_NewStream/writerady/Write/destrostream吗?由于NPP_Write仅在浏览器有数据时才被调用,因此I/O不应阻止主线程,对吗?对于所有实例,浏览器始终只使用一个线程与插件通信;作为回报,你也应该这样做,不要从主线程以外的地方调用任何NPN_uu函数。是的,I/O不会阻止主线程,因为NPP_uwrite只有在浏览器有数据时才会被调用;也就是说,只要在处理主线程时不阻塞它。如果您需要更多关于如何实现这一点的示例,请查看FireBreath()的源代码