jjzjj

Multi-threaded

全部标签

c# - 如何制作从 C# "Thread-safe"调用的 C (P/invoke) 代码

我有一些使用单个全局变量的简单C代码。显然这不是线程安全的,所以当我在C#中使用P/invoke从多个线程调用它时,事情就搞砸了。如何为每个线程单独导入此函数,或使其成为线程安全的?我尝试声明变量__declspec(thread),但这导致程序崩溃。我还尝试制作一个C++/CLI类,但它不允许成员函数是__declspec(naked),我需要(我正在使用内联汇编)。我在编写多线程C++代码方面经验不足,因此可能缺少某些内容。下面是一些示例代码:C#[DllImport("MyDll.dll",CallingConvention=CallingConvention.Cdecl)]pu

C# - 线程中止异常(Thread Abort Exception)重新抛出自身

我有当前代码:classProgram{privatestaticvoidMain(){while(true){try{Thread.CurrentThread.Abort();}catch(ThreadAbortException){Console.WriteLine("Abort!");Thread.ResetAbort();}Console.WriteLine("nowwaiting");Console.ReadKey();}}}现在我知道ResetAbort方法应该可以防止ThreadAbortException继续重新抛出自身,即使catch语句正在捕获它,但我的问题是:如果

c# - "thread-safe type"到底是什么?我们什么时候需要使用 "lock"语句呢?

我阅读了所有关于线程安全类型和“锁定”语句的文档,但我仍然没有100%理解它。具体什么时候需要使用“lock”语句?它与(非)线程安全类型有何关系?谢谢。 最佳答案 想象一个类的实例,里面有一个全局变量。想象一下,两个线程同时对该对象调用一个方法,并且该方法更新内部的全局变量。变量中的值很可能会被破坏。不同的语言和编译器/解释器会以不同的方式处理这个问题(或者根本不处理......)但关键是你会得到“不希望的”和“不可预测的”结果。现在假设该方法在尝试读取或写入变量之前获得变量的“锁”。第一个调用该方法的线程将获得变量的“锁”,第二

c# - MSDN : What is "Thread Safety"?

在许多MSDN文档中,这写在线程安全标题下;“此类型的任何公共(public)静态(在VisualBasic中为共享)成员都是线程安全的。不保证任何实例成员都是线程安全的。”例如;here有人可以用一种相当简单的方式解释一下吗?谢谢:) 最佳答案 埃里克·利珀特(EricLippert)表现出色blogpost对这个。基本上它本身有点毫无意义。当我看到那个样板时,就我个人而言,在这方面我不太相信MSDN。它并不总是意味着它所说的。例如,它对Encoding说了同样的话-尽管事实上我们都在各处使用来自多个线程的编码。除非我有任何理由不

c# - 没有 "threads"的异步和等待?我可以自定义引擎盖下发生的事情吗?

我有一个关于如何自定义新async的问题/await关键字和TaskC#4.5中的类是。首先了解我的问题的一些背景知识:我正在开发具有以下设计的框架:一个线程有一个“当前待办事项”列表(通常大约有100到200个项目),这些列表存储为自己的数据结构并作为列表保存。它有一个Update()枚举列表并查看某些“事物”是否需要执行并执行的函数。基本上它就像一个大线程调度器。为了简化事情,让我们假设“要做的事情”是返回bool值true的函数。当它们“完成”时(不应称为下一次更新)和false下次更新时调度程序应该再次调用它们。所有“事物”不能并发运行,也必须在一个线程中运行(因为线程静态变量

c# - Thread.sleep vs Monitor.Wait vs RegisteredWaitHandle?

(以下项目有不同的目标,但我很想知道它们是如何“暂停”的)问题Thread.sleep-它会影响系统的性能吗?它会占用线程等待吗?Monitor.Wait呢?他们“等待”的方式有什么不同?他们会在等待时占用线程吗?RegisteredWaitHandle怎么样?此方法接受等待时执行的委托(delegate)句柄发出信号。在等待期间,它不会占用线程。所以一些线程被暂停并且可以被委托(delegate)唤醒,而其他线程只是等待?旋转?有人可以把事情说清楚吗?编辑http://www.albahari.com/threading/part2.aspx 最佳答案

c# - 开发 Multi-Tenancy asp.net MVC 应用程序时要记住什么?

下午好-我今天有一个很笼统的问题-我的任务是创建一个网络应用程序来管理客户的一些基本信息。这是一个非常简单的应用程序,但我不知道在围绕支持多个用户在他们自己的域或我们url的子域中开发站点时要记住什么?我如何限制用户登录应用的其他部分?我在StackOverflow上的类似问题中看到了对数据库范围的提及,有人可以详细说明这种实现的最佳实践吗?MVC3中是否有任何支持Multi-Tenancy的新功能?我正面临MVC2和我的电子商务网站的这个问题,我们决定我们希望它为多个店主贴上白色标签并可定制,并且不知道从哪里开始在现有应用程序中实现这些功能。感谢任何输入。编辑详细说明Multi-Te

c# - 何时处理带有子任务的 System.Threading.Task?

我有一个启动多个子任务的任务。(例如,任务A创建B、C、D、E、F)。我还创建了一个System.Threading.Timer以每10秒轮询一次数据库,以检查计划的项目是否已按请求取消。如果是,它会设置CancellationTokenSource以便任务知道要取消。每个子任务,在本例中为B、C、D、E、F,将在适当的时候取消(它们循环遍历文件并四处移动)。由于Task实现了IDisposable,我想知道从再次调用Task.WaitAll是否是个好主意catchblock,等待取消传播。虽然将处理取消请求,但子任务可能处于循环中间并且在完成之前无法取消但是,根据MSDN:Alway

c# - Ninject multi-injection 并没有我想象的那么贪心!怎么会?

如果我有一个类,其中的ctor设置为像这样的多重注入(inject):publicShogun(IEnumerableallWeapons){this.allWeapons=allWeapons;}绑定(bind)设置如下:Bind().To();Bind().To().WhenInjectedInto();那么我希望build幕府将军时两种武器都已注入(inject)?但事实并非如此-它只会获得Dagger。如果我像这样添加进一步的绑定(bind):Bind().To();Bind().To().WhenInjectedInto();Bind().To().WhenInjectedI

c# - EntityFramework 测试初始化​​错误 : CREATE DATABASE statement not allowed within multi-statement transaction

我正在尝试构建一个快速测试,每次运行时都会删除并重新创建数据库。我有以下内容:[TestClass]publicclassPocoTest{privateTransactionScope_transactionScope;privateProjectDataSource_dataSource;privateRepository_repository=newRepository();privateconststring_cstring="DataSource=.;InitialCatalog=test_db;Trusted_Connection=True";[TestInitialize