小编Wil*_*iam的帖子

单核CPU能否实现真正的并发?

"如果你能感觉到计算机每隔几毫秒切换几十个任务的操作,你肯定会同意计算机似乎同时执行这些任务,即使我们知道计算机正在交错计算各种任务"

  • M.Ben-Ari,"并行编程原理",1982年.

那么在单核CPU上,单个原子操作不可能在同一系统内同时执行?

concurrency

3
推荐指数
1
解决办法
2030
查看次数

3
推荐指数
1
解决办法
808
查看次数

给定每个项目的概率,从列表中选择随机项目

对不起,标题措辞不当......

我有一个名为 NGram 的对象

class NGram
{
     //other properties
     double Probability {get; set;} //Value between 1 and 0 
}
Run Code Online (Sandbox Code Playgroud)

现在假设我有这些对象的列表,这样......

List<NGrams> grams = GetNGrams();
Debug.Assert(grams.Sum(x => x.Probability) == 1);
Run Code Online (Sandbox Code Playgroud)

如何在考虑概率分布的同时从此列表中选择随机项目。

例如,假设grams[0].Probability == 0.5应该有 50% 的机会选择grams[0]

我想我可能需要类似的东西, rand.NextDouble()但我不知所措。

c# random probability n-gram

3
推荐指数
1
解决办法
2656
查看次数

为什么在UI线程上调用启动新任务

Task t = new Task(() =>
{
    //I would expect this to be on a worker thread, but it's not!
    Thread.Sleep(1000);
});

Task test = new Task(() =>
{
    Thread.Sleep(1000);
});

test.ContinueWith(x =>
{
    //Do some UI Updates here, but also start another Task running.
    t.Start();
}, TaskScheduler.FromCurrentSynchronizationContext());

test.Start();
Run Code Online (Sandbox Code Playgroud)

为什么t在UI线程上调用gets.据我所知,我创建了一个持续Task反对test其正确地被调用在UI线程上,但我然后开始一个新任务的运行.现在我知道我可以通过指定TaskScheduler.Default作为重载方法来解决这个问题t.Start,但是为什么Task在ui线程上开始新的?

.net c# multithreading task-parallel-library

2
推荐指数
1
解决办法
111
查看次数

当线程运行相同的方法时,为什么值不冲突?

看这里:

static void Main(string[] args)
{
    test p = new test();

    new Thread(() => p.SayHello("Thread One")).Start();
    new Thread(() => p.SayHello("Thread Two")).Start();
}
Run Code Online (Sandbox Code Playgroud)

然后:

class test
{
    public void SayHello(string data)
    {
        int i = 0;

        while (i < 50)
        {
            Console.WriteLine("Hello from " + data);
            i++;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

为什么第二个线程没有将变量重置i为0?搞乱它在第一个线程上运行的while循环?

c# concurrency multithreading

1
推荐指数
2
解决办法
118
查看次数

我怎样才能获得画布的元素?

我怎样才能获得画布的元素?

我有这个:

<Canvas x:Name="can" HorizontalAlignment="Left" Height="502" Margin="436,0,0,0" VerticalAlignment="Top" Width="336" OpacityMask="#FFC52D2D">
    <Canvas.Background>
        <SolidColorBrush Color="{DynamicResource {x:Static SystemColors.ActiveCaptionColorKey}}"/>
    </Canvas.Background>
    <Button x:Name="btn_twoThreads" Content="Two Threads" Height="32" Canvas.Left="195" Canvas.Top="460" Width="131" Click="btn_twoThreads_Click"/>
    <Button x:Name="btn_oneThread" Content="One Thread" Height="32" Canvas.Left="10" Canvas.Top="460" Width="131" Click="btn_oneThread_Click"/>
    <Rectangle Fill="#FFF4F4F5" Height="55" Canvas.Left="10" Stroke="Black" Canvas.Top="388" Width="316"/>
</Canvas>
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,XAML代码中的这个画布上有一些对象.我需要获取Rectangle对象的详细信息:

Rectangle r; 

r = can.Children[2] as Rectangle; //I know this probably doesn't retrieve the rectangle object, but hopefully you can see what I am trying to achieve.

if (r != null)
{
    MessageBox.Show("It's a rectangle");
}
Run Code Online (Sandbox Code Playgroud)

我知道我可能只是通过在XAML中给它一个变量名来访问Rectangle对象,但是canvas对象是在各种类中绘制的,我不想将矩形传递给每个类,如果它已经是包含在画布中.

c# wpf xaml canvas object

0
推荐指数
1
解决办法
4710
查看次数