我正在尝试学习如何使用POSIX线程在C中编写并行算法.我的环境是带有gcc 4的Mac OS X 10.5.5.
编译:
gcc -Wall -D_REENTRANT -lpthread source.c -o test.o
Run Code Online (Sandbox Code Playgroud)
所以,我的问题是,如果我在Ubuntu 9.04框中编译它,它按顺序运行顺利,在Mac上看起来像互斥体不起作用,线程不等待获取共享信息.
苹果电脑:
#1
#0
#2
#5
#3
#4
Run Code Online (Sandbox Code Playgroud)
Ubuntu的
#0
#1
#2
#3
#4
#5
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?
按照以下源代码:
#include <ctype.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <pthread.h>
#define NUM_THREADS 6
pthread_mutex_t mutexsum;
pthread_t threads[NUM_THREADS];
long Sum;
void *SumThreads(void *threadid){
int tmp;
int i,x[10],y[10];
// Para cada x e y do vetor, jogamos o valor de i, só para meio didáticos
for (i=0; i<10 ; i++){
x[i] …Run Code Online (Sandbox Code Playgroud) 在你对肠道作出反应之前,正如我最初所做的那样,请阅读整个问题.我知道他们让你感觉很脏,我知道我们以前都被烧过,我知道这不是"好风格",但公共场地还好吗?
我正在研究一个相当大规模的工程应用程序,它创建并使用结构的内存模型(从高层建筑到桥梁到棚子,无关紧要).该项目涉及TON的几何分析和计算.为了支持这一点,该模型由许多微小的不可变只读结构组成,用于表示点,线段等事物.这些结构的某些值(如点的坐标)可被访问数十亿或数亿典型程序执行期间的时间.由于模型的复杂性和计算量,性能绝对至关重要.
我觉得我们正在尽我们所能优化我们的算法,性能测试以确定瓶颈,使用正确的数据结构等.我不认为这是过早优化的情况.性能测试显示直接访问字段而不是通过对象上的属性时性能提升的数量级(至少).鉴于此信息,以及我们还可以公开与属性相同的信息以支持数据绑定和其他情况......这样可以吗? 请记住,只读取不可变结构上的字段. 任何人都可以想到我会后悔的原因吗?
这是一个示例测试应用程序:
struct Point {
public Point(double x, double y, double z) {
_x = x;
_y = y;
_z = z;
}
public readonly double _x;
public readonly double _y;
public readonly double _z;
public double X { get { return _x; } }
public double Y { get { return _y; } }
public double Z { get { return _z; } }
}
class Program {
static void Main(string[] …Run Code Online (Sandbox Code Playgroud) 我正在寻找一种等待多个条件变量的方法.即.就像是:
boost::condition_variable cond1;
boost::condition_variable cond2;
void wait_for_data_to_process()
{
boost::unique_lock<boost::mutex> lock(mut);
wait_any(lock, cond1, cond2); //boost only provides cond1.wait(lock);
process_data();
}
Run Code Online (Sandbox Code Playgroud)
条件变量可能是这样的.如果没有替代解决方案?
谢谢
我在设置对象上的Equals方法的测试时遇到问题.
有问题的对象由此接口定义:
public interface IHours {
ITimeOfDay OpenAt { get; set; }
ITimeOfDay CloseAt { get; set; }
DateTime ValidFrom { get; set; }
DateTime ValidTo { get; set; }
bool isCovered(DateTime time);
}
Run Code Online (Sandbox Code Playgroud)
它包含对ITimeOfDay的引用,如下所示:
public interface ITimeOfDay {
DateTime Time { get; set; }
int Hour { get; }
int Minute { get; }
int Second { get; }
}
Run Code Online (Sandbox Code Playgroud)
现在我想要等待时间:IHours检查OpenAt和CloseAt IHours.为了进行设置,我尝试将这些属性值存根,只返回true和false,具体取决于我的特定测试需要它们.
[SetUp]
public virtual void SetUp() {
mocks = new MockRepository();
defaultHours = getHours();
otherHours = getHours();
} …Run Code Online (Sandbox Code Playgroud) 我想开发自己的基于网络的工具,用于在我的Gmail帐户的收件箱中搜索邮件并删除其中一些邮件.
我在编程生涯中一直在做的项目与那个项目有很大不同,所以我的问题是:应该使用哪些语言,工具和库来完成这项任务?
在我正在研究的嵌入式设备上,启动时间是一个重要问题.整个应用程序由几个使用一组库的可执行文件组成.由于FLASH内存空间有限,我们希望使用共享库.
当编译并与共享库链接时,应用程序照常工作,并且FLASH内存量按预期减少.与静态库链接的版本的不同之处在于应用程序的启动时间大约长20秒,我不知道为什么.
该应用程序在ARM9 CPU上以180 MHz运行,具有Linux 2.6.17 OS,16 MB FLASH(JFFS文件系统)和32 MB RAM.
考虑以下代码:
LARGE_INTEGER l;
size_t s;
if (s < l.QuadPart) return 1;
return 0;
Run Code Online (Sandbox Code Playgroud)
当在x64下编译它时,它会生成C4018签名/未签名的不匹配编译器警告(忽略未初始化的本地变量警告).
该警告是很好的,因为QuadPart是LONGLONG被签名和size_t未签名.
但是当我在32位下编译它时没有警告?怎么会?32位以下LONGLONG仍然size_t是已签名且未签名.
我写了printf()如下声明:
printf("hello\n");
Run Code Online (Sandbox Code Playgroud)
使用Linux的gcc编译器构建时,这很好用.但是,如果我写
printf("hello");
Run Code Online (Sandbox Code Playgroud)
打印件不会出现在屏幕上.似乎有一些缓冲机制?有人可以给我更多相关信息吗?
使用Fluent NHibernate映射简单Dictionary属性的最佳方法是什么?
所以我忘记了视图中的一个列实际上是什么,我给它的名字太模糊了.我能找到用于构建它的语句吗?
c++ ×2
.net ×1
boost ×1
c ×1
c# ×1
field ×1
fluent ×1
gcc ×1
gmail ×1
linux ×1
macos ×1
mutex ×1
mysql ×1
nhibernate ×1
optimization ×1
performance ×1
pthreads ×1
rhino-mocks ×1
sql ×1
startup ×1
stubbing ×1
tdd ×1
testing ×1
view ×1
visual-c++ ×1
web-services ×1