我有一个进程A,它在内存中包含一组带有一组记录的表(recordA,recordB等......)
现在,这个进程可以启动许多影响记录的线程,有时我们可以有2个线程试图访问同一条记录 - 这种情况必须被拒绝.特别是如果一个记录被一个线程锁定,我希望另一个线程中止(我不想BLOCK或WAIT).
目前我这样做:
synchronized(record)
{
performOperation(record);
}
Run Code Online (Sandbox Code Playgroud)
但是这导致了我的问题......因为当Process1正在执行操作时,如果Process2进入,则阻塞/等待同步语句,并且当Process1完成时,它执行操作.相反,我想要这样的东西:
if (record is locked)
return;
synchronized(record)
{
performOperation(record);
}
Run Code Online (Sandbox Code Playgroud)
有关如何实现这一目标的任何线索?任何帮助将非常感激.谢谢,
假设我有一系列双打,如下所示:
Array[10] = {10, 10, 10, 3, 10, 10, 6, 10, 10, 9, 10}
Run Code Online (Sandbox Code Playgroud)
我需要一个函数来确定数组中MAJORTY投票的内容,在本例中为"10",因为它是最常出现的数字......当然还有没有多数投票的情况(它们在哪里)等于),在这种情况下,我需要抛出异常......
有线索吗?除了在数组上做一些非常讨厌的循环之外(对于每个索引,确定存在多少具有相同值的数量,在数组中存储计数,然后扫描计数数组中的最高数字,并且该位置的值是赢家等...)
我有一个类(NamedPipeManager),它有一个线程(PipeThread)等待使用(ConnectNamedPipe)的NamedPipe连接,然后读取(ReadFile) - 这些是阻塞调用(不重叠) - 但是有一点我想要解锁它们 - 例如当调用类试图停止NamedPipeManager时...
我怎么能打断它呢?使用Thread.abort?了Thread.interrupt?有没有正确的方法来处理这个?请参阅下面的代码,该代码说明了我目前的情况
main()
{
NamedPipeManager np = new NamedPipeManager();
... do stuff ...
... do stuff ...
np.Stop(); // at this point I want to stop waiting on a connection
}
class NamedPipeManager
{
private Thread PipeThread;
public NamedPipeManager
{
PipeThread = new Thread(new ThreadStart(ManagePipes));
PipeThread.IsBackground = true;
PipeThread.Name = "NamedPipe Manager";
PipeThread.Start();
}
private void ManagePipes()
{
handle = CreateNamedPipe(..., PIPE_WAIT, ...);
ConnectNamedPipe(handle, null); // this is the BLOCKING call waiting for client …
Run Code Online (Sandbox Code Playgroud) 我需要找到一种方法来做一个INSERT INTO table A
但是其中一个值是来自表B上的查找,允许我说明.
我有以下两个表:
表A:
A1: String
A2: Integer value coming from table B
A3: More Data
Run Code Online (Sandbox Code Playgroud)
表B:
B1: String
B2: Integer Value
Run Code Online (Sandbox Code Playgroud)
A的示例行:{"Value",101,MoreData} B的示例行:{"English",101}
现在,我知道我需要将以下内容插入到A {"Value2","English",MoreData}中,但显然这是行不通的,因为它期望第二列中的Integer不是"English",所以我需要首先在表B中进行查找.
像这样的东西:
INSERT INTO tableA (A1, A2, A3)
VALUES ("Value2", SELECT B2 FROM tableB where B1="English", MoreData);
Run Code Online (Sandbox Code Playgroud)
显然这不起作用......
有什么建议?
我有一个服务负责许多任务,其中一个是在一个单独的线程(threadJob子)上启动作业(一次一个),这些作业可能需要相当长的时间和
有各种各样的阶段,我需要报告.
通常,调用应用程序从服务请求状态(GetStatus),这意味着服务需要知道什么时候作业(子线程)是
在,我希望在某些里程碑,子线程可以某种方式通知(SetStatus)其状态的父线程(服务),并且服务可以返回该信息
到调用应用程序.
例如 - 我希望做这样的事情:
class Service
{
private Thread threadJob;
private int JOB_STATUS;
public Service()
{
JOB_STATUS = "IDLE";
}
public void RunTask()
{
threadJob = new Thread(new ThreadStart(PerformWork));
threadJob.IsBackground = true;
threadJob.Start();
}
public void PerformWork()
{
SetStatus("STARTING");
// do some work //
SetStatus("PHASE I");
// do some work //
SetStatus("PHASE II");
// do some work //
SetStatus("PHASE III");
// do some work //
SetStatus("FINISHED");
}
private void SetStatus(int status)
{
JOB_STATUS = status;
} …
Run Code Online (Sandbox Code Playgroud) 我正在寻找实现以下内容的最简单,最直接的方法:
然后其余部分相当简单,处理3个结果然后终止......
现在,我一直在做一些阅读,发现了多个想法,比如:
无论如何 - 什么是最好的,最简单的推荐方法?谢谢,