我想在ARM设备上以C(或C ++)非常快速地生成Base64数据。
我发现这个不错的lib by aklomp。
它尝试在CPU上使用SIMD指令(如果可用),但是我的CPU没有该指令。
无论如何,如果不这样做,它仍然非常快,这是我的摘录:
char Base64Buffer[5500];
// buffer_size is max 4096
int writeOutput(uint8_t *buffer, int buffer_size) {
mutex.lock();
base64_encode((const char*)buffer, buffer_size, Base64Buffer, &Base64Length, 0);
...
mutex.unlock();
return 0;
}
writeOutput
是一个静态函数,可以同时从多个线程中调用。
因此,我应用了互斥锁(来自Boost)以避免并发调用。
如果只有一个线程调用此代码,则此代码会非常好用。
但是,当我增加线程数时,在大约3个并发线程的情况下,base64_encode
函数有时会创建无效的base64流。
不幸的是,我不知道原始(未编码)数据是什么,但是我有一个错误编码数据的示例:https://pastebin.com/ggrcQ1kD
这里可能是什么情况?线程如何影响互斥块的执行?