我目前为线程安全整数创建了一个C++类,它只是私有地存储一个整数,并且公共获取一个使用boost :: mutex的set函数,以确保一次只能对整数应用一个变量.
这是最有效的方法,我被告知互斥量是非常耗费资源的吗?该课程使用频繁,非常迅速,因此很可能成为瓶颈......
谷歌C++线程安全整数返回不清楚的视图和oppinions在不同架构上的整数操作的线程安全性.
有人说,在32位拱32位int是安全的,但64对32是不是因为"对齐"还有人说,这是编译器/操作系统特定的(我不怀疑).
我使用Ubuntu 9.10在32台机器上,一些具有双核等线程可以同时在不同核心上在一些情况下执行,并且我使用GCC 4.4的克++编译器.
提前致谢...
请注意: 我标记为"正确"的答案最适合我的问题 - 但是在其他答案中有一些优点,它们都值得一读!
如果标题不清楚,我会尽量澄清我的要求:
想象一下,我有一个名为counter的变量,我知道我可以通过以下方式看到它的当前值:
std::cout << counter << std::endl;
Run Code Online (Sandbox Code Playgroud)
但是,假设我有很多变量,我不知道在运行之前我想要查看哪些变量.
有没有人知道我可以通过使用其名称来获取变量值的方法,例如:
std::cout << valueOf("counter") << std::endl;
Run Code Online (Sandbox Code Playgroud)
我觉得能够做到这一点可能会使调试大型复杂项目变得更容易.
在此先感谢您的时间.
更新:所提供的所有答案都是有效且有用的,但重点是C++中不存在反射(并且在阅读建议的链接之后很明显为什么).
我正在尝试使用 fstream 部分截断(或缩短)现有文件。我尝试过写一个 EOF 字符,但这似乎没有任何作用。
任何帮助,将不胜感激...
在搜索无表格模型示例后,我遇到了这个代码,这似乎是关于如何创建一个代码的一般共识.
class Item < ActiveRecord::Base
class_inheritable_accessor :columns
self.columns = []
def self.column(name, sql_type = nil, default = nil, null = true)
columns << ActiveRecord::ConnectionAdapters::Column.new(name.to_s, default, sql_type.to_s, null)
end
def all
return []
end
column :recommendable_type, :string
#Other columns, validations and relations etc...
end
Run Code Online (Sandbox Code Playgroud)
但是我还希望它能够像模型那样起作用,表示一个对象的集合,这样我就可以做Item.all.
计划是使用文件填充项目,并从文件中提取每个项目的属性.
但是目前如果我做Item.all我会得到一个
Mysql2::Error Table 'test_dev.items' doesn't exist...
错误.
我试图在MySQL数据库中删除过期的条目,在创建或更新名为lastBeat的字段时使用CURRENT_TIME进行更新,并使用以下查询来检查/删除超过20秒的行:
DELETE * FROM `rmachines` WHERE
`lastBeat` < (NOW() - 20);
Run Code Online (Sandbox Code Playgroud)
我也尝试过CURRENT_TIME而不是NOW()
有2个主循环:
每秒更新rmachines中的一行
执行删除查询
如果2快速执行,当时间滚动到下一分钟(即59-60秒)时,它会删除该行,就像它已经过期一样(即使它确实没有!),否则它表现良好.
如果2每秒执行一次这不是那么明显,那么"错误到期"很少发生,但我每秒运行5次以暴露"问题".
我找到了一个解决方案,经过测试并且似乎在相同的情况下工作:
但谁能告诉我为什么我的方法不起作用?
c++ ×3
activerecord ×1
datetime ×1
delete-row ×1
file ×1
fstream ×1
integer ×1
model ×1
mysql ×1
ofstream ×1
ruby ×1
sql-delete ×1
timestamp ×1
truncate ×1
variables ×1