如何保护基于 C 的库的 init 函数?
我编写了一个基于 C 的库,为了使其能够多线程并行工作,我在 init 函数中创建了一些全局互斥体。
我希望在多线程中使用库 API 之前先在主线程中调用 init 函数。
但是,如果在多线程中直接调用init函数本身,那就有问题了。有没有办法保护 init 函数本身免受我的库的影响?我能想到的一种方法是要求应用程序创建互斥体并保护对我的 init 函数的并行调用,但是我可以保护它免受我的库本身的影响吗?
I have written a C based library and for it to work in multi-thread parallely, I create some global mutexes in the init function.
I expect the init function to be called in the main thread before the library APIs are used in multi-thread.
But, if the init function itself is called in multi-thread directly, then it is a problem. Is there a way to protect the init function itself from my library? One way I can think of is to ask the application to create a mutex and protect parallel calls to my init function, but can I protect it from my library itself?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
POSIX 有
pthread_once
函数在 linux 手册页中,有以下指导性示例
POSIX has the
pthread_once
functionIn the linux man page they then have the following instructive example
您可能想使用默认入口点函数。
在 Windows 中,您可以使用 DllMain 来创建和销毁互斥体。
在 Linux 和可能其他一些 Unix 上,您可以在入口和出口函数上使用 __attribute__((constructor)) 和 __attribute__((destructor)) 。
在这两种情况下,函数将在加载和卸载时调用一次
You probably want to use teh default entry point functions.
In windows you can use
DllMain
to create and destroy your mutexes.On Linux and probably some other Unixes you can use
__attribute__((constructor))
and__attribute__((destructor))
on your entry and exit functions.In both these case, the functions will be called once on load and unload