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) 可能重复:
这种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函数指针的"通常"方式之间的细微差别是什么?
如果Java应用程序抛出未处理的异常,则会导致Eclipse在此时断开.有没有办法检查当前的异常?基本上,$exception来自MSVS?
我想实现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) 有很多问题要求如何检测IDisposable对象泄漏.似乎答案是"你不能".
我刚刚用最琐碎的测试用例检查过,FxCop 10.0没有这样做,带有MSVS2010的ReSharper 4没有这样做.
这对我来说似乎不对,比C中的内存泄漏更糟糕(至少我们已经建立了检测工具).
我在想:是否有可能使用反射和其他模糊的高级技术,我可以在运行时注入一个检查,在终结器中查看是否Dispose已被调用?
WinDBG + SOS的魔术技巧怎么样?
即使没有现成的工具,我也想知道这在理论上是否可行(我的C#不是很尖锐).
想法?
注意这个问题的标题可能会产生误导.这里真正的问题应该是一个是否IDisposable对象已Disposed()正确.由于我认为这是一个错误,因此由GC处理并不重要.
编辑:解决方案:.NET Memory Profiler完成工作.我们只需要GC.Collect()在程序结束时发送几个垃圾邮件,以使我们的探查器能够正确地获取统计数据.
我试图用蛮力的方法解决ITA Software的"Word Nubmers"难题.看起来我的Haskell版本比C#/ C++版本慢10多倍.
感谢Bryan O'Sullivan的回答,我能够"纠正"我的程序达到可接受的性能.你可以阅读他的代码比我的清洁得多.我将在这里概述要点.
Int是Int64在Linux上GHC 64.除非你unsafeCoerce,你应该使用Int.这样可以省去fromIntegral.这样做Int64在Windows 32位GHC只是该死缓慢,避免它.(这实际上不是GHC的错.正如我在下面的博客文章中提到的,32位程序中的64位整数一般都很慢(至少在Windows中))-fllvm或-fvia-C表演.quotRem到divMod,quotRem已经足够了.这让我加速了20%.Data.Vector以Data.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) (这个问题并不仅限于语言,所以请随意提交其他语言的解决方案.)
我只是想知道是否可以在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
我以为这会在网上的某个地方,但我不能谷歌它:
考虑到创建MSI软件包所涉及的复杂性(与NSIS,InnoSetup等相比),要解决所有问题是一个令人信服的理由(使用MSVS糟糕的安装项目向导,学习一个全新的语言/生态系统安装程序(WiX),或支付大量许可费(InstallShield))为了制作MSI安装程序?
如果有明显的MSDN页面,那么拥有现实世界的观点或经验(甚至证明MSI真的毫无价值)会很高兴,例如:)
我在GDB中有一个指针,我怎样才能找到它首先在堆上分配的位置?
在WinDBG中,这可以!heap -p -a <0x12345678>在打开后完成gflags /i <*exe> +ust
既然Valgrind可以告诉我内存的分配位置(当它检测到一些泄漏时),我猜这也有可能吗?
(这不是关于观察点.这是我随机闯入In GDB,应用程序,查看指针并想知道"谁创建了这段内存"的情况?)
在GDB中使用反向调试是一种非常新颖的方式,可能是解决此问题的正确方法.我用GDB 7.1遇到了一些问题 - 最新的稳定版本.反向调试是GDB中的一个相当新的功能,所以我需要检查HEAD(7.2)来修复它.
它可能说明了GDB方法的成熟性,但我认为它应该在它更成熟时使用.(很棒的功能!)
假设我有一个包含十几个不同模块的项目,它们生成一个结果DLL,我该如何分析它以便我可以识别每个模块/函数所贡献的实际文件大小?我知道在Release版本中可能无法删除大量信息,但是如果我拥有完整的源代码并且可以执行Debug构建怎么样?
另外,如果在某处定义了大的静态变量,有没有办法可以轻松找到它们?
奖金问题:Linux ELF文件怎么样?
debugging ×2
performance ×2
.net ×1
c ×1
c# ×1
c++ ×1
concurrency ×1
deployment ×1
diagnostics ×1
dumpbin ×1
eclipse ×1
gdb ×1
haskell ×1
heap ×1
idisposable ×1
install ×1
installer ×1
java ×1
javascript ×1
low-level ×1
memory ×1
memory-leaks ×1
profiling ×1
pthreads ×1
templates ×1
typedef ×1
windows ×1