当变量给出范围时,如何在Bash中迭代一系列数字?
我知道我可以这样做(在Bash 文档中称为"序列表达式" ):
for i in {1..5}; do echo $i; done
Run Code Online (Sandbox Code Playgroud)
这使:
1
2
3
4
5
但是,如何用变量替换任何一个范围端点?这不起作用:
END=5
for i in {1..$END}; do echo $i; done
Run Code Online (Sandbox Code Playgroud)
哪个印刷品:
{} 1..5
每隔一段时间,我就必须在我编写的大部分代码(无论是工作还是播放)之间切换语言.我发现C++是那些需要大量心理缓存空间的语言之一,所以如果我从中休息一段时间,那么我会忘记很多细节.即使是像将项目添加到一个STL容器,或使用的东西static
在不同的上下文中存储的关键字得到所有混乱的("是add
,append
,push
...哦,这是push_back
").
那么当你编写C++时,你喜欢什么基本的花絮加载到你的大脑中?
编辑:我应该说,我希望能够为此页面添加书签并将其用作我的备忘单:)
假设我有一个多线程C++程序,它以函数调用的形式处理请求handleRequest(string key)
.每次调用都handleRequest
发生在一个单独的线程中,并且存在任意大量的可能值key
.
我想要以下行为:
handleRequest(key)
在具有相同值时被序列化key
.handleRequest
可能的主体看起来像这样:
void handleRequest(string key) {
KeyLock lock(key);
// Handle the request.
}
Run Code Online (Sandbox Code Playgroud)
问题:如何实现KeyLock
以获得所需的行为?
一个天真的实现可能会像这样开始:
KeyLock::KeyLock(string key) {
global_lock->Lock();
internal_lock_ = global_key_map[key];
if (internal_lock_ == NULL) {
internal_lock_ = new Lock();
global_key_map[key] = internal_lock_;
}
global_lock->Unlock();
internal_lock_->Lock();
}
KeyLock::~KeyLock() {
internal_lock_->Unlock();
// Remove internal_lock_ from global_key_map iff no other threads are waiting for it.
}
Run Code Online (Sandbox Code Playgroud)
...但是,这需要在每个请求的开头和结尾处进行全局锁定,并为每个请求创建单独的Lock
对象.如果调用之间的争用很高handleRequest
,那可能不是问题,但如果争用率很低,则可能会产生大量开销.