我有2个线程和一个共享float全局.一个线程只写入变量,而另一个只读取它,我是否需要锁定对此变量的访问?换一种说法:
volatile float x;
void reader_thread() {
while (1) {
// Grab mutex here?
float local_x = x;
// Release mutex?
do_stuff_with_value(local_x);
}
}
void writer_thread() {
while (1) {
float local_x = get_new_value_from_somewhere();
// Grab mutex here?
x = local_x;
// Release mutex?
}
}
Run Code Online (Sandbox Code Playgroud)
我主要关注的是,一个的加载或存储float不是原子,使得local_x在reader_thread结束有一个假的,部分更新后的值.
sig_atomic_t作为共享变量的工作,假设它有足够的位用于我的目的?有问题的语言是C使用pthreads.
我可以知道如何确定是否在JPanel中找到了某个组件?
boolean isThisComponentFoundInJPanel(Component c)
{
Component[] components = jPanel.getComponents();
for (Component component : components) {
if (c== component) {
return true;
}
}
return false;
}
Run Code Online (Sandbox Code Playgroud)
使用循环效率不高.有没有更好的方法?
当我尝试通过单击"添加现有项目"在资源设计器中添加资源时,该项目将放在"资源"文件夹中.
问题是,如果我在Resource目录中创建一个新目录并将资源放在那里,我会收到编译器错误,指出无法找到这些文件.
我无法将所有资源放在一个文件夹中,因为我必须添加2500个图像,其中一些与其名称相匹配.
我正在使用一个分层架构,将实体框架作为我的数据层,顶部有一堆存储库,其中包含Linq-To-Entities查询.数据层是一个项目,旁边是我有一个服务层和接口,这是一个网站.
我希望我的网站负责为我的实体模型指定连接字符串.我该怎么做呢?
我使用单例方法到达我的实体存储库,该存储库位于数据层内.
谢谢
我正在对一个大型科学应用程序进行基准测试,发现在相同输入的情况下它有时会慢10%.经过大量搜索,我发现只有在我的四核CPU核心#2(特别是运行在2.4 GHz的Intel Q6600)上运行时才会出现减速.该应用程序是单线程的,大部分时间都用在CPU密集型矩阵数学例程中.
现在我知道一个核心比其他核心慢,我可以通过将处理器亲和力设置为所有运行的相同核心来获得准确的基准测试结果.但是,我仍然想知道为什么一个核心更慢.
我尝试了几个简单的测试用例来确定CPU的缓慢部分,但测试用例运行的时间相同,即使在慢速核心#2上也是如此.只有复杂的应用程序显示减速.以下是我尝试过的测试用例:
浮点乘法和加法:
accumulator = accumulator*1.000001 + 0.0001;
Run Code Online (Sandbox Code Playgroud)三角函数:
accumulator = sin(accumulator);
accumulator = cos(accumulator);
Run Code Online (Sandbox Code Playgroud)整数加法:
accumulator = accumulator + 1;
Run Code Online (Sandbox Code Playgroud)尝试使L2缓存未命中时的内存复制:
int stride = 4*1024*1024 + 37; // L2 cache size + small prime number
for(long iter=0; iter<iterations; ++iter) {
for(int offset=0; offset<stride; ++offset) {
for(i=offset; i<array_size; i += stride) {
array1[i] = array2[i];
}
}
}
Run Code Online (Sandbox Code Playgroud)问题:为什么一个CPU内核比其他内核慢,哪个CPU部分导致这种减速?
编辑:更多测试显示了一些Heisenbug行为.当我明确设置处理器亲和性时,我的应用程序不会减慢核心#2的速度.但是,如果它选择在没有明确设置处理器关联的情况下在核心#2上运行,那么应用程序运行速度会慢大约10%.这就解释了为什么我的简单测试用例没有显示相同的减速,因为它们都明确设置了处理器亲和性.因此,看起来有些进程喜欢在核心#2上生存,但如果设置了处理器亲和性,它就会失控.
结论:如果您需要在多核计算机上获得单线程程序的准确基准,请确保设置处理器关联.
有没有办法确定XBAP(浏览器中托管的WPF)应用程序是否具有网络连接?如果没有,用C#和.NET编写的传统Windows客户端如何确定它是否具有连接性?
基本上,用例是在通过WiFi连接到Intranet的移动笔记本电脑上运行的XBAP应用程序.笔记本电脑无法连接到Internet.取决于用户当时的位置,WiFi连接可能存在也可能不存在.
尝试概括我的问题...我想为SELECT语句返回的每个结果执行存储过程.
在心理上我想尝试像EXEC myStoredProc(SELECT id FROM sometable WHERE cond = @param)
有关我的具体案例的更多细节......我有一个SaaS应用程序.我想从系统中删除租户.在我删除租户之前,我必须删除与该租户关联的数据库中的所有记录.
租户拥有诸如包含许多不同类型的字段的表单之类的项目.我已经有一个存储过程删除一个Form及其所有相关项(如Fields).出于维护原因(即不想复制确定记录和表单之间的依赖关系和关联的逻辑)我想为每个属于租户的表单调用StoredProc.
我可以通过运行查询来检索表单列表...选择formId FROM Forms WHERE Tenant = @TenantId
我想对该查询的结果做的是EXEC我的Delete_Form存储过程.
我怎样才能做到这一点?
假设active是一个"boolean field"(小int,0或1)
# Find all active users
select * from users where active
# Find all inactive users
select * from users where NOT active
Run Code Online (Sandbox Code Playgroud)
换句话说,"NOT"运算符可以直接应用于布尔字段吗?
试图理解C中指针的行为,我对以下内容感到有点惊讶(下面的示例代码):
#include <stdio.h>
void add_one_v1(int *our_var_ptr)
{
*our_var_ptr = *our_var_ptr +1;
}
void add_one_v2(int *our_var_ptr)
{
*our_var_ptr++;
}
int main()
{
int testvar;
testvar = 63;
add_one_v1(&(testvar)); /* Try first version of the function */
printf("%d\n", testvar); /* Prints out 64 */
printf("@ %p\n\n", &(testvar));
testvar = 63;
add_one_v2(&(testvar)); /* Try first version of the function */
printf("%d\n", testvar); /* Prints 63 ? */
printf("@ %p\n", &(testvar)); /* Address remains identical */
}
Run Code Online (Sandbox Code Playgroud)
输出:
64
@ 0xbf84c6b0
63
@ 0xbf84c6b0 …Run Code Online (Sandbox Code Playgroud) 我正在开发一个适合MVC模式的swing应用程序,我想知道存储设置的最佳位置,例如宽度/高度,xml文件位置......这些设置是否也可以通过模型进行设置?我应该使用全局静态类吗?单身人士?
提前致谢