In this paper, a duty cycle based multi-channel MAC protocol with multiple channel reservation, called M-cube, is proposed to tackle the triple hidden terminal problems. M-cube can make nodes to choose one actually idle channel from all the expected idle channels. Therefore, M-cube can avoid data packet collisions resulted by the triple hidden terminal problems. By minimizing the lower bound of the average number of times of channel switching in M-cube, the optimal duty cycle is obtained through theoretical analysis. To validate the effectiveness of multiple channel reservation and dynamic optimal duty cycling, extensive simulations and real testbed experiments were conducted. Both the simulation and experiment results show that when the number of channels is large or network loads are heavy, M-cube improves energy efficiency and throughput significantly compared with other works in the literature.