首页 新闻 会员 周边 捐助

.net core 跑在linux或者macos下。 mutex无法使用

0
悬赏园豆:30 [已解决问题] 解决于 2019-06-03 13:09

我用.net core 2.2 里面一句代码是var mutexSecurity = new MutexSecurity();
跑在windows没问题,跑在mac下的时候出了异常

看了许多文章。似乎System.Threading 下的这些mutex,信号量只能跑在 windows下
https://github.com/dotnet/coreclr/issues/1237
https://github.com/dotnet/docs/issues/3825
https://github.com/oleg-shilo/cs-script/issues/10
https://github.com/dotnet/coreclr/issues/3422

大佬们sos,请求帮助支援 @dudu

TeemoHQ的主页 TeemoHQ | 初学一级 | 园豆:49
提问于:2019-05-31 19:47
< >
分享
最佳答案
0

mac 上不支持 MutexSecurity ,建议使用其他 Mutex

收获园豆:30
dudu | 高人七级 |园豆:29286 | 2019-05-31 20:05
dudu | 园豆:29286 (高人七级) | 2019-05-31 20:10

还有其他啥mutex。。。(当然这里可以用redis同步锁等方案解决)
我觉得应该是有别的接口方式解决。

TeemoHQ | 园豆:49 (初学一级) | 2019-05-31 20:46

@dudu: 我看看 先

TeemoHQ | 园豆:49 (初学一级) | 2019-05-31 20:46

@dudu: 文章中 其他几种不是进程级别同步的吧

TeemoHQ | 园豆:49 (初学一级) | 2019-05-31 20:48

@TeemoHQ: Semaphore 可以用于进程级别的同步

dudu | 园豆:29286 (高人七级) | 2019-05-31 20:52


按照这个说法应该一样

TeemoHQ | 园豆:49 (初学一级) | 2019-05-31 20:54

@dudu: 我找个时间试试,再回复你。。 阿里嘎多

TeemoHQ | 园豆:49 (初学一级) | 2019-05-31 20:55

@dudu:
一样

TeemoHQ | 园豆:49 (初学一级) | 2019-06-01 00:38

@TeemoHQ: 参考 https://stackoverflow.com/a/46329498/5989202

By default, names have session scope and sessions are more granular on Unix (each terminal gets its own session). Try adding a "Global" prefix to the name minus the quotes.

dudu | 园豆:29286 (高人七级) | 2019-06-01 08:10

@dudu: mutex三个参数应该是可以,但是安全级别应该不可以,因为这份代码也挂在iis下面跑,所以有安全权限。但是netcore把这个去掉了,但我可以根据系统来是否要设置权限,我晚点试试,再回复你

TeemoHQ | 园豆:49 (初学一级) | 2019-06-01 09:07

@TeemoHQ: 我在 mac 上测试成功了,mutex 名称要以 Global\ 开头,测试代码用的是 https://q.cnblogs.com/q/115648/ 中的

static void Main(string[] args)
{
    string name = @"Global\tt1";
    Console.WriteLine($"Using {name}");
    using (Mutex mutex = new Mutex(true, name, out bool createNew))
    {
        Console.WriteLine("exists mutex " + createNew);
        if (!createNew)
        {
            mutex.WaitOne();
        }
        Console.WriteLine("running");

        Console.ReadLine();
        mutex.ReleaseMutex();
        Console.WriteLine();
        Console.WriteLine("ReleaseMutex");
    }
    Console.ReadLine();
}
dudu | 园豆:29286 (高人七级) | 2019-06-01 15:30
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册