小编Wil*_*iam的帖子

为什么商店装载障碍被认为是昂贵的?

大多数CPU架构都会重新订购存储加载操作,但我的问题是为什么?我对商店装载障碍的解释如下:

x = 50;
store_load_barrier;
y = z;
Run Code Online (Sandbox Code Playgroud)

此外,与发布和获取语义相比,我没有看到这种障碍如何在无锁编程中有多大用处.

concurrency multithreading cpu-architecture lock-free

12
推荐指数
1
解决办法
1732
查看次数

为什么Java没有看到来自另一个线程的更新值?

请查看此代码(摘自Effective Java book)

import java.util.concurrent.TimeUnit;


public class Main {
private static boolean stopReq;
public static void main(String[] args) throws InterruptedException {


    Thread bgw = new Thread(new Runnable()
    {
        public void run(){

        int i = 0;
        while(!stopReq){ i++;}
        }
        });
    bgw.start();
    TimeUnit.SECONDS.sleep(1);
    stopReq = true;

}

}
Run Code Online (Sandbox Code Playgroud)

为什么bgw线程陷入无限循环?stopReq当它到达循环时它是否缓存它自己的副本?所以它永远不会看到来自其他线程的更新值?

我理解这个问题的解决方案是同步或volatile变量,但我很好奇为什么这个当前的实现不起作用.

谢谢

java concurrency multithreading

10
推荐指数
1
解决办法
2548
查看次数

抽象类中的'this'关键字

我有点困惑为什么我能够在抽象类中使用'this'.

我正在制作一个非常简单的面向对象的角色扮演游戏.我有一个基础/超级类叫Items.然后,我有两种类型的物品,可装备和非装备.

interface IEquiptable
{
    void equiptItem(Player p);
    void unequiptItem(Player p);
}
Run Code Online (Sandbox Code Playgroud)

Theres可装备物品的界面.

接下来,我有一个名为的抽象类Weapons:

abstract class Weapons : Items, IEquiptable 
{
    public double powerOfWeapon { get; set; }
    public double powerNeededToUse { get; set; }


    public void equiptItem(Player p)
    {
        Console.WriteLine(this); 
        p.weapon = this;
    }

    public void unequiptItem(Player p)
    {
        //UNTESTED METHOD
        p.weapon = new Swords("Fists", 1, 1);
    }

}
Run Code Online (Sandbox Code Playgroud)

这扩展了基类Items(此类目前只包含项目的名称,因此不值得显示)并实现接口'IEquiptable'.

最后我有一个叫做的课 Swords

class Swords : Weapons
{

    public Swords(string name, double powerOfS, double …
Run Code Online (Sandbox Code Playgroud)

c# abstract-class this

7
推荐指数
1
解决办法
2335
查看次数

什么是 DispatcherFrame 以及如何使用它?

这是MSDN提供的代码,虽然它似乎不清楚它在做什么:

[SecurityPermissionAttribute(SecurityAction.Demand, Flags = SecurityPermissionFlag.UnmanagedCode)]
public void DoEvents()
{
    DispatcherFrame frame = new DispatcherFrame();
    Dispatcher.CurrentDispatcher.BeginInvoke(DispatcherPriority.Background,
    new DispatcherOperationCallback(ExitFrame), frame);
    Dispatcher.PushFrame(frame);
}

public object ExitFrame(object f)
{
    ((DispatcherFrame)f).Continue = false;

    return null;
}
Run Code Online (Sandbox Code Playgroud)

我刚刚注意到今天在DoEvents定义该方法的一些遗留代码中的类似实现。为什么我们需要这个以及将框架推送到调度程序上意味着什么?

c# wpf dispatcher

7
推荐指数
0
解决办法
2677
查看次数

'有效载荷文件不存在'这是什么意思?

我试图在Windows 8应用程序中绘制一些图形.

所以我下载了这个:

http://modernuitoolkit.codeplex.com/

然后我右键单击我的项目,单击添加引用并导航到.dll文件.

但是当我尝试构建项目时,我遇到了这些类型的错误:

错误18有效负载文件'c:\ users\mark\Desktop\ChartingTest\ChartingTest\ModernUI.Toolkit.Data.Charting\Charts\Series\LineSeries.xaml'不存在.APP1

错误15有效负载文件'c:\ users\mark\Desktop\ChartingTest\ChartingTest\ModernUI.Toolkit.Data.Charting\Charts\Series\DataPointSeries.xaml'不存在.APP1

错误16有效负载文件'c:\ users\mark\Desktop\ChartingTest\ChartingTest\ModernUI.Toolkit.Data.Charting\Charts\Series\DefinitionSeries.xaml'不存在.APP1

错误17有效负载文件'c:\ users\mark\Desktop\ChartingTest\ChartingTest\ModernUI.Toolkit.Data.Charting\Charts\Series\LegendItem.xaml'不存在.APP1

这只是其中的一小部分.他们似乎与Xaml有关.

谢谢.

c# xaml

6
推荐指数
4
解决办法
7810
查看次数

了解WPF中提供的DispatcherPriority枚举的真实行为

有关于每个枚举的定义的文档.但是我怎么能在实践中演示/看到这个?我怎么可能知道何时使用哪个优先级?

下面是一些代码,我已经在尝试看到先决如何影响排序创建的,它为我提供了证据,证明的顺序是正确的(第一循环迭代将增加一个SystemIdle枚举到调度队列),但它仍然有加最后一个字符串

private void btn_Click(object sender, RoutedEventArgs e)
    {
        StringBuilder result = new StringBuilder();
        new Thread(() =>
            {

                var vals = Enum.GetValues(typeof(DispatcherPriority)).Cast<DispatcherPriority>().Where(y => y >= 0).ToList();
                vals.Reverse();
                vals.ForEach(x =>
                    { 
                        Dispatcher.BeginInvoke(new Action(() =>
                        {
                            result.AppendLine(string.Format("Priority: {0} Enum:{1}", ((int)x), x.ToString()));
                        }), x);
                    });


            }).Start();

        ShowResultAsync(result, 2000);
    }

    private async void ShowResultAsync(StringBuilder s, int delay)
    {
        await Task.Delay(delay);
        MessageBox.Show(s.ToString());
    }
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

并且输出顺序保持不变,即使列表反转(在vals分配后添加此行):

vals.Reverse();
Run Code Online (Sandbox Code Playgroud)

那么,在确定我应该分配哪个调度优先级时,还有什么我可以使用的吗?

c# wpf multithreading dispatcher

6
推荐指数
1
解决办法
6067
查看次数

如何传递事件参数?

我在C#中注意到我可以覆盖Form()父类中的方法,如下所示:

    protected override void OnPaint(PaintEventArgs e)
    {

    }
Run Code Online (Sandbox Code Playgroud)

我不明白如何PaintEventArgs生成以及如何/何时将其传递给此函数.我必须假设OnPaint()每次表格需要重新绘制时都会调用.

此外,当我创建按钮按事件时,它们看起来像这样:

    private void button1_Click(object sender, EventArgs e)
    {

    }
Run Code Online (Sandbox Code Playgroud)

再次,我不明白激活按钮点击时这些参数是如何/为什么传递的.

.net c# events

5
推荐指数
1
解决办法
722
查看次数

按另一个列表中项目的存在对列表进行排序

假设我有两个列表:

a = ['30', '10', '90', '1111', '17']
b = ['60', '1201', '30', '17', '900']
Run Code Online (Sandbox Code Playgroud)

您将如何最有效地对其进行排序,例如:

列表b相对于 进行排序a。中的唯一元素b应放在排序列表的末尾。中的唯一元素a可以被忽略。

示例输出:

c = ['30', '17', '60', '1201', '900']
Run Code Online (Sandbox Code Playgroud)

对不起,这是一个简单的问题。我的尝试停留在十字路口。

intersection = sorted(set(a) & set(b), key = a.index)
Run Code Online (Sandbox Code Playgroud)

python sorting list

5
推荐指数
2
解决办法
157
查看次数

在x86中将字符串定义为字节(db)和将字符串定义为单词/双字(dw / dd)有什么区别

我正在尝试研究在汇编中定义标签之间的区别,这是一个示例

ALabel: db 'Testing'
AAnotherLabel: dw 'Testing'
Run Code Online (Sandbox Code Playgroud)

现在,让我将它们加载到32位寄存器中:

mov eax, [ALabel]
mov ebx, [AAnotherLabel]
Run Code Online (Sandbox Code Playgroud)

在对gdb进行调查后,我发现eax和ebx的所有子寄存器都包含相同的值,请看这里:

info register eax
0x64636261 //dcba

info register ebx
0x64636261 //dcba
Run Code Online (Sandbox Code Playgroud)

他们是一样的!

在杰夫·邓特曼(Jeff Duntemann)的书(使用Linux进行汇编语言逐步编程)中,他展示了单词和双字进入寄存器的示例,但由于某种原因加载了偏移量(即,值的地址类似)

DoubleString: dd 'Stop'
mov edx, DoubleString
Run Code Online (Sandbox Code Playgroud)

对edx内容的调查表明,它包含一个地址,大概是字符串中前四个字母的地址,与仅第一个字母的地址相对应,尽管我在这里进行了推测。

我想弄清楚这里实际发生的情况,实际上是该语句是否将字符串中第一个字母的地址加载到寄存器中:

Fin: db 'Final'
mov ecx, Fin
Run Code Online (Sandbox Code Playgroud)

linux x86 assembly nasm

4
推荐指数
1
解决办法
858
查看次数

将托管字符串编组为 char 指针 C#

我正在使用 C# 中的 Marshal 类,对此操作的结果有点困惑:

\n\n
string someVal = "Hello There";\nIntPtr ptS = Marshal.StringToHGlobalAnsi(someVal);\nchar* ptsPt = (char*)ptS.ToPointer();\n
Run Code Online (Sandbox Code Playgroud)\n\n

在立即窗口中查看 ptsPt[0] 后,它包含以下值:\\'\xe6\x95\x88\'

\n\n

我猜测这与将托管字符视为 8 位值的方法有关StringToHGlobalAnsi,但当它们实际上是 16 位时。但我不太明白为什么会发生这种情况。

\n\n

我知道我可以通过将其更改为 来解决这个问题StringToHGlobalUni。但我不明白这是为什么!

\n\n

干杯

\n

.net c# pointers unmanaged

4
推荐指数
1
解决办法
3058
查看次数