多线程环境中的Base64生成

时间:2020-04-03 08:01:32

标签: multithreading base64 mutex boost-mutex

我想在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

这里可能是什么情况?线程如何影响互斥块的执行?

0 个答案:

没有答案
相关问题