我有子app-domain,我想在启动时加载一些dll库并释放文件,这样任何人都可以删除它们.
在启动时,我做
Loader al = (Loader)domain.CreateInstanceAndUnwrap(
typeof(Loader).Assembly.FullName,
typeof(Loader).FullName);
al.Load(path)
Run Code Online (Sandbox Code Playgroud)
以下课程.
class Loader : MarshalByRefObject
{
internal void Load(string path)
{
Assembly assembly;
try
{
assembly = Assembly.Load(File.ReadAllBytes(path));
}
catch (Exception) { return; }
}
internal UseType(string fullyQualifiedTypeName)
{
Type userType = Type.GetType(fullyQualifiedTypeName);
}
}
Run Code Online (Sandbox Code Playgroud)
稍后我调用UseType并获得正确的类型,但我无法再删除该文件,因为它就像子app域已锁定dll一样.
基本上我想要实现的是在启动时缓存程序集文件,然后使用GetType调用以便释放实际的dll文件.
真的有可能实现这样的目标吗?
这是“多处理器编程的艺术”中两个线程的mutext实现
private int victim;
// thread-local index, 0 or 1
public void lock() {
int i = ThreadID.get();
victim = i; // let the other go first
while (victim == i) {} // spin
}
public void unlock() {}
Run Code Online (Sandbox Code Playgroud)
他们指出,如果“一个线程先于另一个线程运行”,则此代码将死锁。没有死锁发生时,任何人都可以描述交错执行的示例。