如何确保在同一OS线程上调用本机代码?

时间:2013-11-20 19:32:26

标签: c# .net

从C#代码,我调用一个本地库,要求调用者遵循某些线程规则。该库的接口实质上如下:

void* CreateModel();
void DoStuff(const void* model);
void DestroyModel(const void* model);

CreateModel()函数实例化一个新模型,该模型作为void指针返回。其他功能提供了对该模型起作用的功能。

客户端必须遵循的线程规则是,所有接受模型的调用都是从调用CreateModel()的同一OS线程中生成的。该库是线程安全的,因为多个线程可以在不同的模型实例上运行。但是每个模型都与创建它的OS线程具有亲和力。

我的问题是,我是否需要做一些特别的事情以确保我遵守这些线程规则。据我所知,托管线程的整个生命周期内托管线程不一定映射到同一个OS线程上。

我从MSDN主题Managed and Unmanaged Threading in Windows中读到以下内容:

  

操作系统 ThreadId 与托管线程没有固定关系,因为非托管主机可以控制托管和非托管线程之间的关系。具体而言,复杂的主机可以使用Fiber API针对同一操作系统线程调度许多托管线程,或者在不同的操作系统线程之间移动托管线程。

我该如何解释?我的C#应用​​程序肯定不会在不同的OS线程之间移动托管线程。在那种情况下,我可以安全地假设没有别的吗?

0 个答案:

没有答案