小编bug*_*t77的帖子

线程安全的C++堆栈

我是C++的新手,我正在编写一个多线程的应用程序,不同的编写者会将对象推入堆栈,读者将它们从堆栈中拉出(或者至少将指针推到对象上).

是否有内置于C++中的结构可以在不添加锁定代码等的情况下处理此问题?如果没有,Boost库怎么样?

编辑:

你好.感谢最初的好答案.我想我认为这可能是内置的一个原因是我纯粹在x86空间思考并且认为指针的PUSH/POP应该是指令级别的原子动作.

我不确定我最初的预感是否正确,但我想在所有平台上都不一定如此.虽然如果在x86上运行,你是否会将原子PUSH和POP发送到堆栈中,如果是这样,这实际上是否使它无锁?

c++ stack multithreading boost thread-safety

14
推荐指数
2
解决办法
2万
查看次数

Lua比C/C++更适合的示例用法

我目前正在嵌入Lua并将其用作一个美化的智能配置文件.但是,我认为我缺少一些东西,因为人们对Lua的使用赞不绝口.

例如,我可以通过显示这个示例轻松解释为什么你可以使用shell脚本而不是C(诚然,boost regexp是过度杀伤):

#include <dirent.h> 
#include <stdio.h> 
#include <boost/regex.hpp>

int main(int argc, char * argv[]) {
    DIR           *d;
    struct dirent *dir;
    boost::regex re(".*\\.cpp$");
    if (argc==2) d = opendir(argv[1]); else d = opendir(".");
if (d) {
    while ((dir = readdir(d)) != NULL) {
            if (boost::regex_match(dir->d_name, re)) printf("%s\n", dir->d_name);
    }

    closedir(d);
}

return(0);
Run Code Online (Sandbox Code Playgroud)

并将其与:

for foo in *.cpp; do echo $foo; done;
Run Code Online (Sandbox Code Playgroud)

你能在Lua中给出任何可以让我"点击"的例子吗?

编辑:也许我的问题是我不知道Lua还不能流利地使用它,因为我发现编写C代码更容易.

EDIT2:

一个例子是C++和Lua中的玩具阶乘程序:

#include <iostream>

int fact (int n){
    if (n==0) return 1; else
    return (n*fact(n-1));
}

int main …
Run Code Online (Sandbox Code Playgroud)

c c++ lua

14
推荐指数
2
解决办法
2万
查看次数

无锁结构的C++原子操作

我正在使用原子(双)比较和交换指令实现无锁机制,例如cmpxchg16b

我目前正在汇编中编写它,然后将其链接进去.但是,我想知道是否有办法让编译器自动为我执行此操作?例如,带有'原子级'的环绕代码块,并让它弄清楚如何将代码实现为底层处理器体系结构中的原子指令(或者如果底层arch不支持它,则在编译时生成错误)?

PS我知道gcc有一些内置函数(至少对于CAS)

http://gcc.gnu.org/onlinedocs/gcc-4.4.0/gcc/Atomic-Builtins.html#Atomic-Builtins

c++ atomic lock-free

12
推荐指数
2
解决办法
2万
查看次数

删除堆然后取消引用指向该内存的指针

这是练习中的代码:

#include <iostream>
using namespace std;

int main() {
    int n = 13;
    int* ip = new int(n + 3);
    int* ip2 = ip;
    cout << *ip << endl;
    delete ip;
    cout << *ip2 << endl;
    cout << ip << tab << ip2 << endl;
}
Run Code Online (Sandbox Code Playgroud)

当删除分配给堆上的int的空间时,我认为取消引用指针会产生某种内存错误.相反,它返回0.

为什么是这样?

c++ heap pointers

4
推荐指数
1
解决办法
1358
查看次数

Android ActivityNotFoundException意图

我注意到分析标记的一些错误:

class android.content.ActivityNotFoundException
Msg: android.app.Instrumentation.checkStartActivityResult:1408 (No Activity found to handle Intent { act=android.intent.action.VIEW dat=market://details?id=com.example.myprog })
Run Code Online (Sandbox Code Playgroud)

以下代码是为了打开Android Market.我是否认为此错误意味着未安装Android Market并且没有其他应用程序注册处理市场网址?

android exception google-play

4
推荐指数
1
解决办法
1835
查看次数

在C中嵌入汇编程序,编译器为您查找寄存器

将汇编代码嵌入到C/C++程序中时,可以通过使用push指令保存寄存器(或指定编译器的clobber列表支持它)来避免破坏寄存器.

如果你包括汇编内联并希望避免推送和弹出破坏寄存器的开销,有没有办法让gcc为你选择寄存器(例如它知道它们中没有有用的信息).

c assembly inline-assembly cpu-registers

3
推荐指数
1
解决办法
345
查看次数