小编kiz*_*zx2的帖子

In pthread, how to reliably pass signal to another thread?

I'm trying to write a simple thread pool program in pthread. However, it seems that pthread_cond_signal doesn't block, which creates a problem. For example, let's say I have a "producer-consumer" program:

pthread_cond_t my_cond = PTHREAD_COND_INITIALIZER;
pthread_mutex_t my_cond_m = PTHREAD_MUTEX_INITIALIZER;

void * liberator(void * arg)
{
    // XXX make sure he is ready to be freed
    sleep(1);

    pthread_mutex_lock(&my_cond_m);
    pthread_cond_signal(&my_cond);
    pthread_mutex_unlock(&my_cond_m);

    return NULL;
}

int main()
{
    pthread_t t1;
    pthread_create(&t1, NULL, liberator, NULL);

    // XXX Don't take too long to get ready. …
Run Code Online (Sandbox Code Playgroud)

concurrency multithreading pthreads

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

C"函数指针"typedef没有星号?

可能重复:
这种typedef是什么意思?功能原型?

今天我遇到了这种语法

typedef double (d2d)(double);
Run Code Online (Sandbox Code Playgroud)

cdecl告诉我它是一个返回double的函数(而不是指向返回double的函数的指针).那么让我们看看它是如何工作的:

#include <stdio.h>

typedef double (d2d)(double);
//typedef double (*d2d)(double); // the "usual" way

double twice(double x)
{
    return x * 2.0;
}

double apply(d2d f, double x)
{
    return f(x);
}


int main()
{
    printf("%f\n", apply(twice, 2.0)); // Prints 4.0000
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

令人惊讶的是,GCC 4.2.1编译它没有问题.我只是想知道这和typedef函数指针的"通常"方式之间的细微差别是什么?

c typedef function-pointers

12
推荐指数
0
解决办法
476
查看次数

检查Eclipse调试器中的当前异常?

如果Java应用程序抛出未处理的异常,则会导致Eclipse在此时断开.有没有办法检查当前的异常?基本上,$exception来自MSVS?

java eclipse debugging

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

C++模板元编程功夫挑战(取代宏函数定义)

情况

我想实现Composite模式:

class Animal
{
public:
    virtual void Run() = 0;
    virtual void Eat(const std::string & food) = 0;
    virtual ~Animal(){}
};

class Human : public Animal
{
public:
    void Run(){ std::cout << "Hey Guys I'm Running!" << std::endl; }
    void Eat(const std::string & food)
    {
        std::cout << "I am eating " << food << "; Yummy!" << std::endl;
    }
};

class Horse : public Animal
{
public:
    void Run(){ std::cout << "I am running real fast!" << std::endl; } …
Run Code Online (Sandbox Code Playgroud)

c++ templates metaprogramming

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

检测"泄露"的IDisposable对象

有很多问题要求如何检测IDisposable对象泄漏.似乎答案是"你不能".

我刚刚用最琐碎的测试用例检查过,FxCop 10.0没有这样做,带有MSVS2010的ReSharper 4没有这样做.

这对我来说似乎不对,比C中的内存泄漏更糟糕(至少我们已经建立了检测工具).

我在想:是否有可能使用反射和其他模糊的高级技术,我可以在运行时注入一个检查,在终结器中查看是否Dispose已被调用?

WinDBG + SOS的魔术技巧怎么样?

即使没有现成的工具,我也想知道这在理论上是否可行(我的C#不是很尖锐).

想法?

注意这个问题的标题可能会产生误导.这里真正的问题应该是一个是否IDisposable对象已Disposed()正确.由于我认为这是一个错误,因此由GC处理并不重要.

编辑:解决方案:.NET Memory Profiler完成工作.我们只需要GC.Collect()在程序结束时发送几个垃圾邮件,以使我们的探查器能够正确地获取统计数据.

.net c# memory-leaks idisposable

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

分析Haskell程序的缓慢性能

我试图用蛮力的方法解决ITA Software的"Word Nubmers"难题.看起来我的Haskell版本比C#/ C++版本慢10多倍.

答案

感谢Bryan O'Sullivan的回答,我能够"纠正"我的程序达到可接受的性能.你可以阅读他的代码比我的清洁得多.我将在这里概述要点.

  • IntInt64在Linux上GHC 64.除非你unsafeCoerce,你应该使用Int.这样可以省去fromIntegral.这样做Int64在Windows 32位GHC只是该死缓慢,避免它.(这实际上不是GHC的错.正如我在下面的博客文章中提到的,32位程序中的64位整数一般都很慢(至少在Windows中))
  • -fllvm-fvia-C表演.
  • 宁愿quotRemdivMod,quotRem已经足够了.这让我加速了20%.
  • 一般情况下,倾向于Data.VectorData.Array作为"阵列"
  • 大量使用包装工人模式.

以上几点足以让我比原版大约100%的提升.

在我的博客文章中,我详细介绍了如何将原始程序与Bryan的程序相匹配的逐步说明示例.这里还提到了其他一些观点.

原来的问题

(这可能听起来像"你能为我做的工作"一文,但我认为这样一个具体的例子会非常有启发性,因为剖析Haskell的表现通常被视为一个神话)

(正如评论中所指出的,我认为我误解了这个问题.但是谁在乎,我们可以专注于不同问题的表现)

这是我对该问题的快速回顾的版本:

A wordNumber is defined as

wordNumber 1 = "one"
wordNumber 2 = "onetwo"
wordNumber 3 = "onethree"
wordNumber 15 = "onetwothreefourfivesixseveneightnineteneleventwelvethirteenfourteenfifteen"
...

Problem: Find the 51-billion-th letter of (wordNumber …
Run Code Online (Sandbox Code Playgroud)

performance profiling haskell

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

JavaScript方法链接挑战

(这个问题并不仅限于语言,所以请随意提交其他语言的解决方案.)

我只是想知道是否可以在JavaScript中编写类似的内容:

// Wait 3 seconds and then say our message in an alert box
wait(3).then(function(){alert("Hello World!");});
Run Code Online (Sandbox Code Playgroud)

传统的方式是写作

// Wait 3 seconds and then say our message in an alert box
setTimeout(function(){alert("Hello World!");}, 3000);
Run Code Online (Sandbox Code Playgroud)

对不起,如果这是一个菜鸟问题:p

javascript method-chaining

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

拥有MSI安装包的主要优势是什么?

我以为这会在网上的某个地方,但我不能谷歌它:

考虑到创建MSI软件包所涉及的复杂性(与NSIS,InnoSetup等相比),要解决所有问题是一个令人信服的理由(使用MSVS糟糕的安装项目向导,学习一个全新的语言/生态系统安装程序(WiX),或支付大量许可费(InstallShield))为了制作MSI安装程序?

如果有明显的MSDN页面,那么拥有现实世界的观点或经验(甚至证明MSI真的毫无价值)会很高兴,例如:)

deployment installer install windows-installer

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

在GDB中,如何找出哪些malloc在堆上的地址?

我在GDB中有一个指针,我怎样才能找到它首先在堆上分配的位置?

在WinDBG中,这可以!heap -p -a <0x12345678>在打开后完成gflags /i <*exe> +ust

既然Valgrind可以告诉我内存的分配位置(当它检测到一些泄漏时),我猜这也有可能吗?

(这不是关于观察点.这是我随机闯入In GDB,应用程序,查看指针并想知道"谁创建了这段内存"的情况?)


在GDB中使用反向调试是一种非常新颖的方式,可能是解决此问题的正确方法.我用GDB 7.1遇到了一些问题 - 最新的稳定版本.反向调试是GDB中的一个相当新的功能,所以我需要检查HEAD(7.2)来修复它.

它可能说明了GDB方法的成熟性,但我认为它应该在它更成熟时使用.(很棒的功能!)

memory debugging heap gdb

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

分析.exe/.dll(Windows PE)文件以获取代码膨胀

假设我有一个包含十几个不同模块的项目,它们生成一个结果DLL,我该如何分析它以便我可以识别每个模块/函数所贡献的实际文件大小?我知道在Release版本中可能无法删除大量信息,但是如果我拥有完整的源代码并且可以执行Debug构建怎么样?

另外,如果在某处定义了大的静态变量,有没有办法可以轻松找到它们?

奖金问题:Linux ELF文件怎么样?

windows performance diagnostics low-level dumpbin

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