我正在为一个类进行概念性伪代码信号量分配。
我想知道在某个进程调用 wait() 之前是否可以在信号量上调用 signal() 。例如:
Shared data:
Semaphore x = 0;
Process 1:
wait(x);
print("I'm Process 1, and Process 2 has already printed!");
terminate();
Process 2:
print("I'm Process 2!");
signal(x);
terminate();
Run Code Online (Sandbox Code Playgroud)
上面的假设是不能保证哪个进程将首先运行,但我们希望打印语句以正确的顺序执行(进程 2 在进程 1 之前)。如果进程 1 启动,它将等待 x。然后进程 2 将进行打印,发送信号 x,并允许进程 1 进行打印。
但是,如果进程 2 启动,它将在进程 1 等待之前向 x 发出信号。期望的结果是 x 现在将为进程 1“预先发出信号”,以便它将直接跳过 wait(x) 语句。这真的会发生吗?或者是否会出现某种错误,因为您无法发出无人等待的信号量信号?
首先,我有这样的事情:
class Parent
{
int x;
public Parent(int _x)
{
x = _x
}
}
class Child1: Parent
{
int y;
public Child1(int _y):base(_y)
{
y=_y;
}
}
class Child2: Parent
{
int z;
public Child2(int _z):base(_z)
{
z=_z;
}
}
Run Code Online (Sandbox Code Playgroud)
一个简单的父子层次结构.然后,我有一个实际上充满了Child1和Child2的List.我想制作列表中每个对象的副本,我想首先制作一个新的项目作为副本.
但是,如果我这样做:
foreach(Parent p in list)
dictionaryOfCopies.Add(p, new Parent(p.x));
Run Code Online (Sandbox Code Playgroud)
然后字典将充满父母,而不是儿童1和儿童2.有没有办法在不知道对象的特定类型的情况下调用作为其父类型键入的对象的构造函数?