小编Mui*_*uis的帖子

防止嵌套调用

我有一个禁用中断的功能,但问题是,如果我禁用它们并且我调用一个也禁用/启用它们的功能,它们会过早地重新启用.以下逻辑是否足以阻止这种情况?

static volatile int IrqCounter = 0;

void EnableIRQ()
{
    if(IrqCounter > 0)
    {
        IrqCounter--;
    }

    if(IrqCounter == 0)
    {
        __enable_irq();
    }
}

void DisableIRQ()
{
    if(IrqCounter == 0)
    {
        __disable_irq();
    }

    IrqCounter++;
}
Run Code Online (Sandbox Code Playgroud)

c embedded interrupt c99

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

使用extern关键字

当我在我的头文件中声明函数原型时,即使我从不使用'extern'关键字,我仍可以访问程序中的所有位置.它们仅对静态库很重要,或者何时需要它?

c gcc c99 extern

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

.NET:线程的开销

假设我有两个线程:A和B.当A创建一个对象(例如String的List)时,将其传递给B进行处理.每次B访问此对象时性能是否会降低?或者当物体从A到B编组时会有一次性惩罚吗?

.net performance multithreading marshalling

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

最快的SQL全文搜索

我目前正在使用SQLite FTS4引擎,它的性能非常好.但有人知道MySQL的全文搜索(或任何其他SQL数据库)的任何基准/比较?

PS我不是在寻找任何Lucene/NoSQL替代品.

mysql sqlite benchmarking full-text-search fts3

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

在打包/解包结构之间切换

我在 EEPROM (4KB) 中有很多配置数据,我以打包结构读取这些数据。在我的固件中,我需要非常频繁地读取/更改这些值,并且打包结构的性能不是最佳的,所以我有第二个结构,它完全相同,只是没有打包。我必须将每个值从打包结构中一一复制到解压结构中,这很容易出错,因为当我向打包结构中添加一个值时,我还必须记住将其添加到复制函数中。

有没有更聪明的方法来做到这一点?

c structure c99 packed

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

GCC缓存循环变量吗?

当我有一个像这样的循环:

for (int i = 0; i < SlowVariable; i++)
{
   //
}
Run Code Online (Sandbox Code Playgroud)

我知道在VB6中,SlowVariable每次迭代循环都会访问它,使得以下内容更有效:

int cnt = SlowVariable;

for (int i = 0; i < cnt; i++)
{
   //
}
Run Code Online (Sandbox Code Playgroud)

我是否需要在GCC中进行相同的优化?或者它只评估SlowVariable一次?

c optimization performance gcc c99

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

有没有办法在C#中将代码标记为非线程安全?

我试图追捕一个竞争条件,我遇到了许多可疑的功能.其中大多数不允许同时从两个线程调用,但很难确保它们不会.

一个函数并行执行时,是否有一些关键字指示运行时抛出异常?我知道当另一个线程修改我枚举的集合时,我有时会得到一个异常,但这样的保护措施是否足够依赖?

运行时可以使用lock指令暂停执行,所以我需要的只是lock抛出错误.

c# multithreading asynchronous race-condition

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

HTML5:画布上的反色文本颜色

我想在画布上以背景的反色绘制文本(以确保文本是可读的,无论背景颜色如何).我相信oldskool bitblt-ing,这是一个XOR操作.

这该怎么做?

html5 canvas

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

.NET RSA加密:最小密钥大小?

我可以在.NET中加载128位RSA密钥,并将其用于解密.但我似乎无法生成128位(或更低)的密钥,我总是得到错误'指定无效标志'.当我尝试512bits作为按键时,一切正常.那么512位是.NET的最小密钥吗?

.net encryption rsa key

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

有效计算闰日

我使用以下函数来计算两年之间的闰日数:

static int CountLeapDays(int startYear, int endYear) 
{
    int Days = 0;

    while (true)
    {
        if ((startYear % 4 == 0 && startYear % 100 != 0) || startYear % 400 == 0)
            Days++;
        if (startYear + 1 == endYear) break;
        startYear++;
    }

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

有没有另一种方式来写这个,所以它不需要循环?

c datetime date c99 leap-year

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