Access large size data like 180 array from another library thread

I hope this is the right place to post my develop questions. I am developing a obstacle avoidance algorithm with a self built lidarscanner which directly communication with Pix through uart port. This kind of c++ problem, I’ve post in stackoverflow, but you are more familiar with arducopter software architecture. So please give me some suggestions. thanks.
I wrote two classes, and scheduled as two threads in ArduCopter.cpp. The first one is LidarScanner, which dealing with incoming serial data and generates “obstacle situation”. The second one is Algorithm, which handle “obstacle situation” and take some planning strategy. Here are my solution right now, use the reference function LidarScanner::updateObstacle(uint8_t (&array)[181]) to update “obstacle situation” which is 181 size array.

LidarScanner.cpp:

class LidarScanner{

private:
	struct{
	    bool available = false;
        int  AngleArr[181];
        int  RangeArr[181];
        bool isObstacle[181] = {};  //1: unsafe; 0:safe; 
    }scan;

    ......   
public:
	LidarScanner();

	//main function
	void update()
	{
		while(hal.uartE->available()) 		//incoming serial data is available
		{
			decode_data();			  		//decode serial data into three kind data: Range, Angle and Period_flag
			
			if(complete_scan())		  		//determine if the lidarscanner one period is completed	
			{
				scan.available = false;		
				checkObstacle();	   		//check obstacle situation and store safety in isObstacle[181]
				scan.available = true;
			}
		}
	}

	//for another API recall
	void updateObstacle(uint8_t (&array)[181])
	{
		for(int i=0; i<=181; i++)
		{
			array[i]=scan.isObstacle[i];
		}		
	} 
	//for another API recall
	bool ScanAvailable() const { return scan.available; }
	......
}

Algorithm.cpp:

class Algorithm{

private:

	uint8_t Obatcle_Value[181] = {};

	class LidarScanner& _lidarscanner;
	......

public:

	Algorithm(class LidarScanner& _lidarscanner);

	//main funcation
	void update()
	{
		if (hal.uartE->available() && _lidarscanner.ScanAvailable())
		{
			//Update obstacle situation into Algorithm phase and do more planning strategy
			_lidarscanner.updateObstacle(Obatcle_Value); 
		}
	}

	......
}`

Usually, it works fine. But I want to improve the performances so that I want to know what’s the most effective way to do that. Maybe something like buffer?
[1]: http://ardupilot.org/copter/docs/common-pixhawk-overview.html